重複の可能性:
参照が崩壊していますか?
template<
class T = const std::vector<int> &
> void f(const T &);
Tが既に参照されている場合const、どうなりますか? なぜこのコードはコンパイルされるのでしょうか?
重複の可能性:
参照が崩壊していますか?
template<
class T = const std::vector<int> &
> void f(const T &);
Tが既に参照されている場合const、どうなりますか? なぜこのコードはコンパイルされるのでしょうか?
これは & と同等でconst (const std::vector<int>&)あり、この場合、constconst T への const 参照を持つことはできず、const T への参照のみを持つことができないため、the は無視されます。参照は再配置できないため、constとにかく冗長になります。constまた、持っている を無視する(T&) &と、C++11 の参照崩壊規則により、これは になりT&ます。したがって、最終結果はconst T&またconst std::vector<int>&はあなたの場合です。
もしあなたが持っていれば、それはポインタを作るものにconst T*なるので違いがあります.const (const std::vector<int>&)* pconst