这个和成员函数的const正确性

use*_*710 1 c++ this c++11

假设我有一个通用的A类

class A {
  ...
  int a;                // a member
  void foo() const{...} // a member function qualified as const
  ...
};
Run Code Online (Sandbox Code Playgroud)

这意味着如果我声明一个Alike 的实例A k;然后我调用在该调用上/内部k.foo();this指针是foo类型的东西const A * const.

现在我想知道为什么这篇博文中的代码有效,特别是为什么这不适用于全局变量.

我的解释是关于指针别名的隐藏操作,就像this隐式复制指针一样,在此复制期间,结果const不再是(出于某种原因......)但它仍然是this指针,意味着它是指向同一实例的指针.

我的问题是:const如果在声明成员函数的接口之后应用了什么呢?您对链接的博客文章有具体的答案吗?


来自博客的代码

#include <iostream>

class counter {
public:
  int i;    
  counter();    
  int inspect() const;
  void increment();
};

counter sigma_inspect; // sigma_inspect is global

counter::counter() { i = 0; }

int counter::inspect() const {
  sigma_inspect.increment();
  return i;
}

void counter::increment() {
  ++i;
  return;
}

int main(void) {
  counter a; 
  std::cout << a.inspect() << "\n"; 
  std::cout << sigma_inspect.inspect() << "\n";
  std::cout << sigma_inspect.inspect() << "\n";
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*rey 6

博客文章中的调用是使用sigma_inspect非const的,它在它上面调用非const方法,而不是通过const this指针调用所述方法.所以呢?作者似乎期待魔术而不是他所写的明显.这就像拥有

T* t = ...;
const T* ct = t;
t->foo(); // foo() is not const, but hey,
          // I also have a const pointer now (ct),
          // so why can I still use this???
Run Code Online (Sandbox Code Playgroud)

一般来说,如果有人调用C++愚蠢,它会告诉你更多关于作者而不是语言:)