4

重複の可能性:
c++11 での自動参照

C++ を学べば学ぶほど、これまでのところ (ほぼ。以下を参照)、基本的にすべてが理にかなっていることに気づきました。すべてが期待どおりに動作するため、ルールを暗記する必要はありません。したがって、主なことは実際に概念を理解することになり、残りは自然に処理されます。

例えば:

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

これは機能し、理にかなっています。のタイプの他のものはaばかげています。

しかし、今これらを取ります:

auto &b = 42;       //error -- does not automatically become const (const int)
const auto &c = 42; //fine, but we have to manually type const

なぜ最初はエラーになるのですか?コンパイラがこれを自動的に検出しないのはなぜですか? const手動で入力する必要があるのはなぜですか? 厳密なルールを暗記せずに物事を理解できるように、基本的なレベルでその理由を本当に理解したいと思います (上記参照)。

4

2 に答える 2

12

の型42intではなくconst intです。

于 2013-01-16T15:29:02.983 に答える
3

The auto keyword in C++11 behaves very close to how template type deduction works (going back to your concepts approach). If you state the type deduction in terms of template argument deduction it becomes more apparent (I believe):

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

Basically you are creating a new variable initialized with an existing variable. Const-ness of the original from which you copy is orthogonal to const-ness of the destination object.

于 2013-01-16T15:32:52.887 に答える