我认为这个问题已经足够清楚了。auto
关键字是自动检测常量,还是总是返回非常量类型,即使有,例如。函数的两个版本(一个返回const
,另一个不返回)。
仅供记录,我确实在我的for循环之前使用了const auto end = some_container.end()
,但我不知道这是否是必要的,甚至不同于普通的auto
。
发布于 2011-02-22 03:57:26
也许你混淆了const_iterator
和const iterator
。第一个遍历const元素,第二个根本不能迭代,因为您不能在它上面使用operators
++和--。
请注意,您很少从container.end()
迭代。通常,您将使用:
const auto end = container.end();
for (auto i = container.begin(); i != end; ++i) { ... }
发布于 2011-02-22 11:16:04
const auto x = expr;
不同于
auto x = expr;
作为
const X x = expr;
不同于
X x = expr;
所以要经常使用const auto
和const auto&
,就像你没有auto
一样。
重载解析不受返回类型的影响:左值x
上的const
或no const
不会影响expr
中调用的函数。
发布于 2011-02-22 03:58:10
假设您有两个模板:
template<class U> void f1( U& u ); // 1
template<class U> void f2( const U& u ); // 2
auto
将推导出类型,并且变量将具有与参数u
相同的类型(如在// 1
情况下),const auto
将使变量具有与参数u
在// 2
情况下相同的类型。所以const auto
只是强制使用const
限定符。
https://stackoverflow.com/questions/5070521
复制相似问题