2 回答
TA贡献1862条经验 获得超7个赞
相对于&,从右到左读取const 没什么区别,因此它们都表示对不变的Fred实例的引用。
Fred& const这将意味着引用本身是不可变的,这是多余的;当处理const指针时, Fred const*和和Fred* const都有效,但有所不同。
这是一个样式问题,但是我更喜欢将其const用作后缀,因为它可以被一致地应用,包括const成员函数。
TA贡献1856条经验 获得超17个赞
行为
const T&
和之间没有语义差异T const&
;语言将它们视为相同类型。(同样的道理也适用于const T*
和T const*
。)
作为风格问题
但是,关于在造型上您更喜欢哪个,我将拒绝其他许多答案,并且更喜欢const T&
(和const T*
):
const T&
是Stroustrup的《 C ++编程语言》一书中使用的样式。const T&
是C ++标准本身使用的样式。const T*
是K&R的《 C编程语言》一书中使用的样式。const T*
是C标准中使用的样式。由于上述因素,我认为
const T&
/const T*
具有比T const&
/ 更多的惯性T const*
。const T&
/从const T*
经验上看,对我来说比T const&
/T const*
在我所见过的所有C ++和C代码中更常见。我认为遵循常规做法比从原则上遵循从右到左的解析规则更具可读性。使用
T const*
,将*
as 放错地方似乎更容易T* const
(尤其是如果人们不习惯它)。相反,const* T
不是合法的语法。
从右到左的解析规则呢?
关于人们似乎喜欢使用的从右到左的整个解析论点:正如我在另一个答案的评论中提到的,const T&
从右到左也不错。它是对T常数的引用。“ T”和“ constant”都可以用作形容词或名词。(此外,读取T const*
从右到左可以是不明确的,因为它可能被错误地解释为“指针常数到 T”,而不是称为“指针以恒定T”)。
TA贡献1810条经验 获得超5个赞
引用的工作方式与指针不同:对于指针,您可以使用“常量指针”(type * const p
)和“指向常量的指针”(const type * p
或type const * p
)。
但是您没有参考资料:参考资料始终会引用同一对象;从这种意义上讲,您可以认为“引用”是“常量引用”(使用“常量指针”的方式相同)。
因此,“ type&const ref”之类的内容不合法。您只能具有“对类型的引用”(type &ref
)和“对常量类型的引用”(const type &ref
或type const &ref
;两者完全相同)。
最后一件事:即使用const type
英语听起来听起来更正确,但编写仍type const
可以使系统更系统地理解“从右到左”的声明:int const & ref
可以读取“ ref是对常量int的引用”。或更复杂的示例:int const * const & ref
,ref是指向常量int的常量指针的引用。
结论:在您的问题上,两者是完全相同的。
- 2 回答
- 0 关注
- 474 浏览
添加回答
举报