0

重複の可能性:
参照が崩壊していますか?

template<
    class T = const std::vector<int> &
> void f(const T &);

Tが既に参照されている場合const、どうなりますか? なぜこのコードはコンパイルされるのでしょうか?

4

1 に答える 1

2

これは & と同等で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

于 2013-02-02T22:57:16.953 に答える