`const auto`有什么意义吗?

rub*_*nvb 74 c++ const c++11

我认为问题很清楚.将auto关键字自动检测常量性,或总是返回一个非const类型,即使有如.函数的两个版本(一个返回const,另一个不返回).

仅仅为了记录,我确实const auto end = some_container.end()在我的for循环之前使用,但我不知道这是否必要或甚至与正常情况不同auto.

ant*_*kos 89

const auto x = expr;
Run Code Online (Sandbox Code Playgroud)

不同于

auto x = expr;
Run Code Online (Sandbox Code Playgroud)

const X x = expr;
Run Code Online (Sandbox Code Playgroud)

不同于

X x = expr;
Run Code Online (Sandbox Code Playgroud)

所以使用const autoconst auto&很多,就像你没有的那样auto.

重载决策不受返回类型的影响:const或者const左值上的no x不会影响调用的函数expr.

  • 不.如果您不打算(或应该)修改变量,则应将其声明为`const`. (17认同)
  • 不指定`const`会使您的代码不那么通用吗? (2认同)

Ben*_*oit 28

也许你是混乱const_iteratorconst iterator.第一个迭代const元素,第二个不能迭代,因为你不能使用operators++和 - .

请注意,你很少从迭代中迭代container.end().通常你会使用:

const auto end = container.end();
for (auto i = container.begin(); i != end; ++i) { ... }
Run Code Online (Sandbox Code Playgroud)

  • `cbegin`和`cend`按值返回`const_iterator`.`const auto`仍然有它的目的,并不是多余的. (11认同)
  • `<>`?你的意思是`!=`? (4认同)
  • auto由const修改为&,它可以在foreach中使用,例如:http://en.cppreference.com/w/cpp/language/auto (3认同)
  • 那么`const auto`在这种一般情况下有用吗? (2认同)
  • 有人写了太多sql.:) (2认同)

Kir*_*sky 7

考虑您有两个模板:

template<class U> void f1( U& u );       // 1
template<class U> void f2( const U& u ); // 2
Run Code Online (Sandbox Code Playgroud)

auto将推断类型和变量将具有相同类型作为参数u(如在// 1情况),const auto将会使变量相同类型作为参数u已在// 2情况.所以const auto只需强制const限定符.