可能重复:
Reference collapsing?
template<
class T = const std::vector<int> &
> void f(const T &);
如果T
已经const
并且是参考,会发生什么?为什么这个代码会编译呢?
答案 0 :(得分:2)
这相当于const (const std::vector<int>&)
&amp;,在这种情况下,const
将被忽略,因为你不能对const T有一个const引用,只引用const T.无法重新安排,const
无论如何都是多余的。此外,忽略const
(T&) &
,并且由于参考C ++ 11中的折叠规则,这变为T&
。因此,最终结果为const T&
或const std::vector<int>&
。
如果您有const T*
,那么它会有所不同,因为那将是const (const std::vector<int>&)* p
,这将使指针成为const
。