“std::string const &s”和“const std::string &s”有什么区别?

新手上路,请多包涵

我正在寻找有关如何做某事的示例,并看到了这两个变体:

 std::string const &s;
const std::string &s;

在不同的片段中。

谢谢你的回答:)

原文由 Thomas Good 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 749
1 个回答

std::string const & 等价于 const std::string &

const std::string & 是Stroustrup的 The C++ Programming Language 中采用的风格,大概是“传统风格”。

std::string const & 可以比替代方案更一致:

const-on-the-right 样式总是将 const 放在它所构成的右侧,而另一种样式有时将 const 放在左边,有时放在右边。

使用 const-on-the-right 样式,局部变量 const 使用右侧的 const 定义: int const a = 42; 。同样,静态变量 const 定义为 static double const x = 3.14; 。基本上每个 const 都在它所构成的事物的右侧结束,包括 const 需要在右侧:具有 const 成员函数。

(有关详细信息,请参阅 “X const& x”和“X const* p”是什么意思? )。

如果您决定使用 const-on-the-right 样式,请确保不要将 std::string const &s 错误地输入为无意义的 std::string & const s

上述声明的意思是:“ s is a const reference to a std::string ”。这是多余的,因为引用总是 const (您永远不能重置引用以使其引用不同的对象)。

原文由 manlio 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题