在下面的示例中,const
对象可以通过 const
方法修改自身,因为在该方法中,它通过 non-const
指针访问自身。 ( same program on ideone )
#include <iostream>
struct Object;
Object * g_pObject;
struct Object
{
Object():m_a(0){}
void ModifySelfViaConstMethod() const
{
g_pObject->m_a = 37;
}
int m_a;
};
int main()
{
Object o;
g_pObject = &o;
const Object & co = o;
std::cout << co.m_a << "\n";
co.ModifySelfViaConstMethod();
std::cout << co.m_a << "\n";
return 0;
}
我不太擅长阅读c++标准,所以我在这里问一下:
标准对此有何规定?
a)const
方法不能保证您在执行此类操作时对象保持不变
b) 是否明确定义并且必须编译
c) 其他 ?
最佳答案
当您声明一个const
函数时,这是“为了您好”。
换句话说,您将它声明为 const
,因为根据您的初始设计,它不应该更改任何将在运行时调用它的对象。
如果在稍后执行此函数的某个时刻您最终更改了对象,编译器将“对您大喊大叫”,告诉您这是错误的。
当然,只有在 this
上应用时,编译器才能识别此类尝试。
在给定的示例中,编译器无法识别问题,因为它需要在 this
和 g_pObject
之间进行比较,而这种比较只能在运行时进行。
关于c++ - 通过指向 self 的非 const 指针在 const 方法中修改 self,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22053806/