T const&
const T&
T& const //error
以上三种有什么不同?如果&
为*
,会发生什么?
答案 0 :(得分:5)
前两个表单是等价的,虽然我更喜欢第一个表单,因为它更容易推理模板参数推断,并阐明正在使成为常量(在它之前的所有内容):因此,int const*
优于const int*
。
此外,无法使用前缀语法声明一个常量指针(例如,在类型的开头出现int* const
时没有const
的等价物)。因此,对于语法一致性,我宁愿总是使用后缀版本。
第三种形式在常规上下文中使用时会出错,在推导模板参数时它等同于T&
(无法重新分配引用,因此它们在某种意义上总是不变的{{1}被视为多余的。)
如果您将const
更改为&
,则前两个表单仍然相同,而第三个表单现在声明一个指向{{类型的对象的常量指针1}}。请注意,这意味着指针本身是常量(您无法重新分配),而不是指向的对象。
*