【问题标题】:What is the point of adding const to the declaration of std::lock_guard<>?在 std::lock_guard<> 的声明中添加 const 有什么意义?
【发布时间】:2019-12-11 08:02:20
【问题描述】:

在一些示例代码中,我看到以下带有const

const std::lock_guard<std::mutex> lock( mux );

在其他一些例子中,没有const

任何技术或语义差异? const 是否以某种方式向读者发出了有趣的信号?例如,它是否旨在提醒他们锁定不会再发生任何事情?

【问题讨论】:

  • 制作不变的变量const 是一种很好的做法。 1. 表示它们不会改变,2. 帮助编译器优化代码和 3. 防止意外更改
  • 这在很大程度上取决于个人程序员。是的,它具有语义意义(因为对象不能被修改),但它也具有信息意义(对象不会被修改)。作者的意图是哪一个无法说。

标签: multithreading c++11 constants mutex


【解决方案1】:

std::lock_guardconst 实例与非const 实例的行为相同。添加const 没有任何好处,也没有任何好处。

类型没有成员函数,不可复制,不可移动,所以本质上没有区别。

我会将const 视为噪音并将其删除。

【讨论】:

    【解决方案2】:

    const 添加到声明中提供了一个免费文档,此实例是不可变的,而无需查看std::lock_guard 声明。

    当然,它不会提供任何性能优势,因为 std::lock_guard 本质上是不可变的,但您的代码的所有读者可能都不知道这一点。

    【讨论】:

      【解决方案3】:

      有些人认为默认情况下 C++ 中的 mutable 不太理想,而是将 everything const 改为。 const 可以避免因无意中修改该变量而导致的编程错误。

      【讨论】:

        猜你喜欢
        • 2016-12-09
        • 1970-01-01
        • 2012-09-23
        • 2012-11-16
        • 1970-01-01
        • 2011-06-30
        • 2011-10-23
        • 1970-01-01
        • 2018-10-07
        相关资源
        最近更新 更多