可能重复:
参考崩溃?
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。