0

可能重复:
参考崩溃?

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

如果T已经是const和参考,会发生什么?为什么这段代码会编译呢?

4

1 回答 1

2

这将等效于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

于 2013-02-02T22:57:16.953 回答