标准vs显式自动推导变量声明

时间:2017-05-09 16:32:05

标签: c++ c++11

考虑这两个等效的变量声明:

int foo{5};
auto bar = int{5};

使用后一种语法有什么好处吗?

2 个答案:

答案 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;