将 vs. typedef 用于 std::vector::iterator

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

提问人:Foaly 提问时间:7/13/2015 最后编辑:BarryFoaly 更新时间:7/13/2015 访问量:1334

问:

我在使用新的 C++11 关键字时遇到问题。据我了解,它是 的别名。但我无法编译它。我想为 .如果我使用它,一切都很完美。usingtypedefstd::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;
                            ^

为什么不编译?

使用 stdvector 的 C++ C ++11

评论


答:

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 是我有时使用第二个声明:)