2
using IntegerType1 = int;
typedef int IntegerType2;

int main()
{
    IntegerType1 n1 = 1; // OK
    IntegerType2 n2 = 2; // OK
}

我的问题是:

  1. using-style 和 typedef-style 有什么区别?

  2. 既然我们已经有了 typedef-style,那么让 using-style 成为 C++ 标准的动机是什么?

4

2 回答 2

5

引入了“使用风格”以允许模板化类型定义:

template< typename T >
using int_map = std::map< int, T >;

你不能用typedef. 我自己觉得很奇怪,决定使用它using而不是typedef作为关键字,但我猜委员会一定发现了扩展typedef语法的一些问题。

于 2013-09-14T06:55:08.947 回答
3

我发现即使对于非模板,可读性也大大提高:

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 指南草案中。

于 2013-09-14T07:56:19.363 回答