中的论点有什么区别:
int foo1(const Fred &arg) {
...
}
和
int foo2(Fred const &arg) {
...
}
?我没有在 parashift FAQ 中看到这个案例。
原文由 eisbaw 发布,翻译遵循 CC BY-SA 4.0 许可协议
const T&
和 T const&
之间没有语义差异;语言将它们视为同一类型。 (同样的事情适用于 const T*
和 T const*
。)
但是,关于您应该在风格上更喜欢哪个,我会反对许多其他答案,而是更喜欢 const T&
(和 const T*
):
const T&
是 Stroustrup 的 The C++ Programming Language 一书中使用的风格。const T&
是 C++ 标准本身使用的样式。const T*
是 K&R 的 The C Programming Language 一书中使用的风格。const T*
是 C 标准中使用的样式。const T&
/ const T*
比 T const&
/ T const*
有更大的惯性。 const T&
/ const T*
empirically seem way more common to me than T const&
/ T const*
in all of the C++ and C code that I’ve见过。我认为遵循常见做法比教条地坚持从右到左的解析规则更具可读性。T const*
,似乎更容易将 *
错位为 T* const
(特别是如果人们不习惯它)。相反, const* T
不是合法的语法。关于人们似乎喜欢使用的整个从右到左的解析参数:正如我在对另一个答案的评论中提到的那样, const T&
从右到左也读得很好。它是对 T 常数的引用。 “T”和“常数”都可以用作形容词或名词。 (此外,阅读 T const*
从右到左可能会产生歧义,因为它可能被错误地解释为“ 指向 T 的指针常量”而不是“ 指向 常量 T 的指针”。)
原文由 jamesdlin 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
没有区别,因为 const 相对于 & 是从右到左读取的,因此两者都表示对不可变 Fred 实例的引用。
Fred& const
意味着引用本身是不可变的,这是 多余 的;在处理 const 指针 时,Fred const*
和Fred* const
都有效但不同。这是风格问题,但我更喜欢使用
const
作为后缀,因为它可以一致地应用,包括 const member functions 。