混淆了三种形式的参考

时间:2013-02-23 02:04:26

标签: c++

  T const&
  const T&
  T& const   //error

以上三种有什么不同?如果&*,会发生什么?

1 个答案:

答案 0 :(得分:5)

前两个表单是等价的,虽然我更喜欢第一个表单,因为它更容易推理模板参数推断,并阐明正在使成为常量(在它之前的所有内容):因此,int const*优于const int*

此外,无法使用前缀语法声明一个常量指针(例如,在类型的开头出现int* const时没有const的等价物)。因此,对于语法一致性,我宁愿总是使用后缀版本。

第三种形式在常规上下文中使用时会出错,在推导模板参数时它等同于T&(无法重新分配引用,因此它们在某种意义上总是不变的{{1}被视为多余的。)

如果您将const更改为&,则前两个表单仍然相同,而第三个表单现在声明一个指向{{类型的对象的常量指针1}}。请注意,这意味着指针本身是常量(您无法重新分配),而不是指向的对象。

*