因此类似“ type & const ref”的东西是不合法的。只能有“ reference to type”(type &ref)和“ reference to Constant type”(const type &ref或 type const &ref; 两者完全等价)。
最后一件事: 即使 const type在英语中听起来更正确,编写 type const允许更系统地理解“从右到左”的声明: int const & ref可以被读成有“ ref 是对一个常量 int 的引用”。或者更复杂的例子: int const * const & ref,ref 是对指向常量 int 的常量指针的引用。
基于以上因素,我认为 const T&/const T*比 T const&/T const*具有更大的惯性。在我所看到的所有 C + + 和 C 代码中,const T&/const T*在经验上似乎比 T const&/T const*更常见。我认为遵循常规实践比教条地遵循从右到左的解析规则更具可读性。
对于 T const*,似乎更容易把 *错当成 T* const(特别是当人们不习惯它的时候)。相比之下,const* T不是合法的语法。
那么从右到左的解析规则呢?
关于人们似乎喜欢使用的从右到左的解析论点: 正如我在对另一个答案的评论中提到的,const T&从右到左读起来也不错。这是一个 T 常量的参考。“ T”和“常数”都可以用作形容词或名词。(此外,从右到左读取 T const*可能会有歧义,因为它可能被错误地解释为“指针常量 到T”,而不是“指针 到常量 T”。)