use-style和typedef-style有什么区别?

时间:2013-09-14 06:51:55

标签: c++ c++11 types typedef using

using IntegerType1 = int;
typedef int IntegerType2;

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

我的问题是:

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

  2. 由于我们已经有了typedef风格,使用样式的动机是什么才能成为C ++标准?

2 个答案:

答案 0 :(得分:5)

引入了“using-style”以允许模板化的typedef:

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

您无法使用typedef执行此操作。我发现自己很奇怪,决定使用using而不是typedef作为关键字,但我想委员会必须在扩展typedef语法时遇到一些问题。 / p>

答案 1 :(得分: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;

此外(诉诸权威),它也在draft Effective C++11/14 guidelines