std::vector::iterator 使用 vs. typedef

using vs. typedef for std::vector::iterator

我在使用新的 C++11 using 关键字时遇到问题。据我了解,它是 typedef 的别名。但我无法编译它。我想为 std::vector 的迭代器定义一个别名。如果我使用它,一切都会完美无缺。

typedef std::vector<fix_point>::iterator inputIterator;

但如果我尝试:

using std::vector<fix_point>::iterator = inputIterator;

代码无法编译:

Error: 'std::vector<fix_point>' is not a namespace
using std::vector<fix_point>::iterator = inputIterator;
                            ^

为什么不能编译?

你只是把它倒过来:

using inputIterator = std::vector<fix_point>::iterator;

别名语法类似于变量声明语法:您要引入的名称位于 = 的左侧。

typedef 是一个可以与其他说明符混合的说明符。因此,以下 typedef 声明是等效的。

typedef std::vector<int>::iterator inputIterator;
std::vector<int>::iterator typedef inputIterator;

与 typedef 声明相反,别名声明具有严格的说明符顺序。根据 C++ 标准(7.1.3 typedef 说明符)

A typedef-name can also be introduced by an alias-declaration. The identifier following the using keyword becomes a typedef-name and the optional attribute-specifier-seq following the identifier appertains to that typedef-name. It has the same semantics as if it were introduced by the typedef specifier. In particular, it does not define a new type and it shall not appear in the type-id.

因此你必须写

using inputIterator = std::vector<int>::iterator ;