提问人:Foaly 提问时间:7/13/2015 最后编辑:BarryFoaly 更新时间:7/13/2015 访问量:1334
将 vs. typedef 用于 std::vector::iterator
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;
^
为什么不编译?
答:
14赞
Barry
7/13/2015
#1
你只是把它倒过来:
using inputIterator = std::vector<fix_point>::iterator;
别名语法与变量声明语法类似:您引入的名称位于 .=
9赞
Vlad from Moscow
7/13/2015
#2
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 ;
评论
0赞
Vlad from Moscow
7/13/2015
@Barry 是我有时使用第二个声明:)
评论