可能重复:
参考崩溃?
template<
class T = const std::vector<int> &
> void f(const T &);
如果T
已经是const
和参考,会发生什么?为什么这段代码会编译呢?
这将等效于const (const std::vector<int>&)
&,在这种情况下,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
。