为什么这个`auto`不会自动变成“`const`”

时间:2013-01-16 15:26:30

标签: c++

  

可能重复:
  auto reference in c++11

我越了解C ++,我越了解到目前为止(差不多;见下文),其中的所有内容基本上都是有道理的。我发现我并不是真的需要学习任何规则,因为一切都像预期的那样。因此,最重要的是要真正理解这些概念,然后其余的事情就会照顾好自己。

例如:

const int ci = 0;
auto &a = ci;       //automatically made const (const int &)

这有效并且有意义。 <{1}}类型的任何其他内容都是荒谬的。

但现在就拿这些:

a

为什么第一个出错?为什么编译器不会自动检测到这个?为什么必须手动输入auto &b = 42; //error -- does not automatically become const (const int) const auto &c = 42; //fine, but we have to manually type const ?我想要从根本上理解为什么事情有意义,而不必刻意学习任何严格的规则(见上文)。

2 个答案:

答案 0 :(得分:12)

42的类型为int,而不是const int

答案 1 :(得分:3)

C ++ 11中的auto关键字与模板类型推导的工作方式非常接近(回到概念方法)。如果你在模板参数推导方面陈述类型推导,那么它就会变得更加明显(我相信):

template <typename T>
void f(T);
template <typename T>
void g(T&);

const int i;
f(i);              --> T deduced to be int
g(i);              --> T deduced to be const int

基本上,您正在创建一个使用现有变量初始化的新变量。复制原始文件的大小与目标对象的常量正交。