![](/img/trans.png)
[英]std::make_move_iterator vs. std::move for vector concatenation
[英]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说明符)
也可以通过别名声明引入typedef-name。 using关键字后面的标识符变为typedef-name,并且该标识符后面的可选attribute-specifier-seq属于该typedef-name。 它具有与typedef说明符引入的语义相同的语义。 特别是,它没有定义新类型,它不应出现在type-id中。
因此你必须写
using inputIterator = std::vector<int>::iterator ;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.