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

时间:2013-11-17 11:17:38

标签: c++ c++11 this

假设我有一个通用的A类

class A {
  ...
  int a;                // a member
  void foo() const{...} // a member function qualified as const
  ...
};

这意味着如果我声明一个A的实例,如A k;然后我调用k.foo(); this指针,该指针正在调用{{ 1}}类型为foo

现在我想知道为什么这个blog post中的代码有效,特别是为什么它不适用于全局变量。

我的解释是关于指针别名的隐藏操作,就像隐式复制的const A * const指针一样,在此复制过程中结果不再是this(由于某种原因......)但它仍然是一个const指针,意思是指向同一个实例的指针。

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


来自博客的

代码

const

1 个答案:

答案 0 :(得分: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???

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