【问题标题】:Why const after void/int declaration? [duplicate]为什么在 void/int 声明后使用 const? [复制]
【发布时间】:2013-01-14 13:54:25
【问题描述】:

可能重复:
is const (c++) optional?
Constant Member Functions

我看到过关于int a() const 的不同帖子。我的问题是为什么我们要把const 关键字放在那里?我知道它会阻止我们对函数所在的类的成员进行更改,但那又如何呢?

我们可以在函数上方写一个注释,告诉编码器不要对函数内部的类本身进行任何更改,但为什么我们真的关心void 声明之后的const?在哪些情况下可能有更好的使用方式,例如 int a() const 而不仅仅是 int a(),编译后的代码是否会发生变化?

【问题讨论】:

    标签: c++ function constants


    【解决方案1】:

    它确实有所作为。将A 视为具有print() 方法的类。那么这个:

    const A a;
    a.print();
    

    仅编译为print 定义为const

    当然,主要是为了防止对类内部的对象进行任何更改。

    我们可以在函数上方写一个注释,告诉编码器不要对函数内部的类本身进行任何更改

    只是一厢情愿。这不会真的发生。因此,如果有人不阅读评论(或阅读并忽略它),您将收到编译器错误。

    优化还有一个好处 - 编译器可以更好地并行处理 const 对象上的任务,因为它可以假设它们在对它们的操作之间不会发生变化。

    【讨论】:

      【解决方案2】:

      使用const函数的三个基本原因:

      1) C++ 只允许 const 引用可以绑定到临时对象。但是如果你没有有用的 const 函数,那么 const 引用就毫无用处。

      2) 一些库,例如 C++ 标准库,提供仅适用于 const 函数的特定语义保证。例如,您可以在标准集合上保证您可以同时从多个线程访问集合的 const 函数。

      3) 它允许编译器捕捉到容易犯的错误。例如,如果您打算依赖 C++ 标准容器保证,如果您使用 const 对象,则只能调用 const 函数。所以一个错误,比如有人修改代码忘记了并发问题,会在编译时被发现。 (而不是当有人依赖你的程序做实际工作时。)

      【讨论】:

        【解决方案3】:

        声明成员函数 const 的好处是,如果您修改对象,编译器将发出错误。所以,即使你不小心修改了对象,编译器也会发现你的错误。

        【讨论】:

          猜你喜欢
          • 2016-08-03
          • 2020-06-16
          • 2011-06-03
          • 2020-04-11
          • 1970-01-01
          • 1970-01-01
          • 2017-06-15
          • 2019-10-30
          • 1970-01-01
          相关资源
          最近更新 更多