eis*_*baw 132 c++ const reference
参数之间有什么区别:
int foo1(const Fred &arg) {
...
}
Run Code Online (Sandbox Code Playgroud)
和
int foo2(Fred const &arg) {
...
}
Run Code Online (Sandbox Code Playgroud)
?我没有看到parashift FAQ中涉及的这个案例.
jam*_*lin 119
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*凭经验方式似乎更常见的是我比T const&/ T const*在所有的C++和C代码,我见过的.我认为遵循常规做法比通过教条地遵守从右到左的解析规则更具可读性.T const*,它似乎更容易放错地方的*作为T* const(特别是如果人们不是因为习惯了).相比之下,const* T不是合法的语法.关于人们似乎喜欢使用的整个从右到左解析的论点:正如我在对另一个答案的评论中提到的那样,const T&从右到左也是如此.它是对T常数的引用."T"和"常数"各自可以作为形容词或名词.(此外,读取T const*从右到左可以是不明确的,因为它可能被错误地解释为"指针常数到 T",而不是称为"指针以恒定T").
Chu*_*dad 13
虽然它们是同一个,但为了保持与解析C和C++声明的RIGHT-LEFT规则的一致性,最好写一下Fred const &arg
另请参阅此内容以更好地理解声明,限定符和声明符.