【发布时间】:2016-10-02 23:53:37
【问题描述】:
我在 Stroustrup 的一本书中找到了这段代码:
void print_book(const vector<Entry>& book)
{
for (const auto& x : book) // for "auto" see §1.5
cout << x << '\n';
}
但是const 似乎是多余的,因为x 将被推断为const_iterator,因为book 在参数中是const。 const auto真的更好吗?
【问题讨论】:
-
看到
for (auto& x : something)首先想到的是它正在修改元素。很高兴在阅读代码时能够让我的期望与现实保持一致。 -
我会求助于养成习惯的论点:当你有一个好的和普遍的习惯时,编写好的代码会花费你更少的脑力。
-
@chris 不过有相反的问题。如果他们没有意识到
book是const,那么他们可能会认为x是可修改的。 -
在函数更改为接收非常量向量的情况下,它更加健壮。然后循环仍在为自己的目的做正确的事情。
-
"x 将被推断为
const_iterator",没有x将被推断为const Entry&。