C ++:const引用,类型说明符之前和之后

以下参数之间的区别是什么?


int foo1(const Fred &arg) {

...

}


int foo2(Fred const &arg) {

...

}

?我在parashift常见问题解答中看不到这种情况。


达令说
浏览 475回答 2
2回答

牧羊人nacy

相对于&,从右到左读取const 没什么区别,因此它们都表示对不变的Fred实例的引用。Fred& const这将意味着引用本身是不可变的,这是多余的;当处理const指针时, Fred const*和和Fred* const都有效,但有所不同。这是一个样式问题,但是我更喜欢将其const用作后缀,因为它可以被一致地应用,包括const成员函数。

慕慕森

行为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”)。

森栏

引用的工作方式与指针不同:对于指针,您可以使用“常量指针”(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的常量指针的引用。结论:在您的问题上,两者是完全相同的。
打开App,查看更多内容
随时随地看视频慕课网APP