可能重复:
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
?我想要从根本上理解为什么事情有意义,而不必刻意学习任何严格的规则(见上文)。
答案 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
基本上,您正在创建一个使用现有变量初始化的新变量。复制原始文件的大小与目标对象的常量正交。