假设我有一个通用的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
答案 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 ++愚蠢,它会告诉你更多关于作者而不是语言的内容:)