const func (const scalar& a) const 中的三个"const" s,为什么?

Three "const"s in const func (const scalar& a) const, why?

本文关键字:const 三个 为什么 scalar func      更新时间:2023-10-16

>新手在这里!

正在阅读代码,我看到作者经常将成员函数编写为

const int func (const scalar& a) const
// etc

你看这里有三个常量,现在我理解了中间的一个,const scalar&a,它旨在不改变对象a,但是另外两个const呢?

我应该一直这样做,以保护废话不变,这是一个好习惯吗?

多谢!

您发布的代码无效,无法编译。但是,如果您考虑

class MyClass {
  const int& func (const scalar& a) const {
    // ...
  }
};

第一个const将指定返回值是常量(即不可变)。第二个constconst scalar& a ) 指定函数不修改参数值的值 a 。第三个 const 指定 func 是一个常量成员函数,即它不会修改MyClass实例本身。

既然还没有人提到它:两者之间绝对没有区别

const int some_function();

int some_function();

量返回类型(如 int)上的const被忽略;它只对类类型很重要。