using IntegerType1 = int;
typedef int IntegerType2;
int main()
{
IntegerType1 n1 = 1; // OK
IntegerType2 n2 = 2; // OK
}
我的问题是:
using-style 和 typedef-style 有什么区别?
既然我们已经有了 typedef-style,那么让 using-style 成为 C++ 标准的动机是什么?
引入了“使用风格”以允许模板化类型定义:
template< typename T >
using int_map = std::map< int, T >;
你不能用typedef
. 我自己觉得很奇怪,决定使用它using
而不是typedef
作为关键字,但我猜委员会一定发现了扩展typedef
语法的一些问题。
我发现即使对于非模板,可读性也大大提高:
typedef void (*FunctionPtr)(); // right-to-left, identifier in the middle of the definition
using FunctionPtr = void (*)(); // left-to-right, same as variables
这可能是次要的,但在模板元编程中,这种语法优势使程序更易于阅读,并使模板元函数更容易重构为constexpr
函数。本质上替换
using T = type_expression;
constexpr auto v = value_expression;
此外(呼吁权威),它也在有效 C++11/14 指南草案中。