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 ;
我在使用新的 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 ;