0
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>&)
&等同,並且在這種情況下,const
將被忽略,因爲你不能有一個const引用爲const T,僅供參考爲const T.因爲引用不能被重新插拔一下,在const
會無論如何。此外,忽略const
您有(T&) &
,並且由於C++ 11中的引用合併規則,這將變爲T&
。所以最後的結果是const T&
或const std::vector<int>&
你的情況。
如果你有const T*
,那麼它會有所作爲,因爲這將是const (const std::vector<int>&)* p
這將使指針const
。
好的答案,一個任務:什麼是常量左值引用? – user2030677
在C++ 11中,右值引用引入了('int &&'),所以C++ 03引用('int&')現在稱爲左值引用。 –
好的。我只是沒有得到那裏的術語。 :) – user2030677