当一个类型有额外的修饰符时会发生什么?

时间:2013-02-02 22:51:43

标签: c++

  

可能重复:
  Reference collapsing?

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

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

1 个答案:

答案 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