const关键字在方法声明中的不同位置?

use*_*364 2 c++ methods comparison const

有关stackoverflow的类似问题的一些答案,但所有这些都是不完整的或没有比较(使用不同的示例).我看到至少3种可能的声明案例:

  1. const void f();
  2. void f() const;
  3. const void f() const;

他们之间有什么区别?

我发现的唯一区别是以下代码仅适用于(2)或(3):

const foobar fb;
fb.foo();
Run Code Online (Sandbox Code Playgroud)

goj*_*oji 7

  1. const在此位置声明返回类型为const.
  2. const在此位置仅可用于成员函数,并且表示该函数不能/不会修改任何成员非mutable变量(对象常量).
  3. 这是以上2个组合.


cod*_*ing 5

const方法名称之前的A (如问题的第 1. 点和第 3. 点)是指返回类型。这意味着函数的结果是不可修改的;但是这个常量何时真正有意义是有限制的——基本上,它通常只对用户定义的类型有意义。void不过,它在返回类型的上下文中意味着什么,我目前不知道。我最好的猜测是它只是被编译器忽略了。

const方法名称后的A (如第 2 点和第 3 点)使整个方法为 const,这意味着该方法不能修改任何成员(除了已声明的mutable)。

由于您的foobar变量已声明const,因此可能无法修改,因此只能const调用其上的方法,这就是为什么只有 2. 和 3. 工作(它们都声明了方法 const;在 1. 中,它只是返回类型是 const!)