假设我有一个通用的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)
博客文章中的调用是使用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++愚蠢,它会告诉你更多关于作者而不是语言:)
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |