Mat*_*ith 13 c++ pointers const
请考虑以下具有指针成员的类int *a.constMod即使修改指针数据,编译器也允许使用const方法.为什么编译器不在const方法的上下文中使指针数据为const?如果a只是一个int,我们将不允许在const方法中修改它.
class ConstTest
{
public:
ConstTest(int *p): a(p) {}
void constMod() const {
++(*a);
}
int *a;
};
Run Code Online (Sandbox Code Playgroud)
我在linux上使用g ++.
Gre*_*ill 13
在内部constMod(),声明a被视为:
int *const a;
Run Code Online (Sandbox Code Playgroud)
这意味着指针具有常量值,而不是它指向的值.听起来你希望它被视为:
const int *a;
Run Code Online (Sandbox Code Playgroud)
这是不同的.
这只是一个所有权问题......编译器无法知道所指向的对象在逻辑上是否是该对象的一部分,因此留给程序员来监管此类问题。 const成员可以执行有副作用的操作,只要它们不修改自己的表观值。std::cout::operator<<()这与让他们调用 say或其他非常量函数没有什么不同......
| 归档时间: |
|
| 查看次数: |
565 次 |
| 最近记录: |