Max*_*ers 4 c++ iterator uniform-initialization c++11
我对 C++11 非常陌生,迭代器和统一初始化存在问题,我不明白。
考虑以下示例,该示例无法编译:
#include <iostream>
#include <vector>
int main() {
std::vector<int> t{1, 2, 3, 4, 5};
auto iter{t.begin()};
for (; iter != t.end(); ++iter) {
std::cout << *iter;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在第 6 行中,使用统一初始化来初始化向量。在第 7 行中,我尝试使用迭代器执行相同的操作。这是行不通的。将第 7 行更改为 就auto iter = t.begin()可以了。我知道我可以简单地使用“基于范围”,但问题是:为什么统一初始化不适用于迭代器,但适用于基本类型,例如int i{0};?
当您使用初始值设定项列表作为 的初始值设定项时auto,声明的变量将被推导为初始值设定项列表。换句话说,iter被声明为std::initializer_list<vector<int>::iterator>,而不是vector<int>::iterator您所期望的那样。
将其更改为auto iter = t.begin()是继续的最佳方法。
| 归档时间: |
|
| 查看次数: |
238 次 |
| 最近记录: |