考虑这两个等效的变量声明:
int foo{5};
auto bar = int{5};
使用后一种语法有什么好处吗?
答案 0 :(得分:1)
首选第一种情况中的第一种语法原因没有其他副本,但在第二种情况中我们创建了临时对象,然后复制此对象为原始变量 bar 。但这只是在禁用复制elison
的情况下禁用复制elison :
int foo{5}; // No temporary object
auto bar = int{5}; // Created temporary object and then it is copied in bar
启用复制elison :
int foo{5}; // No difference with the second line
auto bar = int{5}; // No difference with the first line
答案 1 :(得分:-1)
在这个例子中没有。您需要使用复杂类型的新语法。即,在for循环中使用迭代器或模板定义 比较:
vector<int> v = {1, 2, 3};
for (auto x : v) std::cout << x << ' ' << std::endl;
和
vector<int> v = {1, 2, 3};
for (std::vector<int>::iterator x = v.begin(); x != v.end(); ++x) std::cout << x << ' ' << std::endl;