以下代码可以正常编译。不过我想知道它是否符合C++标准。更具体地说,如果我有一个const对象,我能否通过该对象的指针/引用修改变量?
class Foo {
public:
int* a;
int& b;
Foo(int* _a, int& _b) : a(_a), b(_b) {}
};
int main ( int argc, char* argv[] ) {
int x = 7;
const Foo bar(&x, x);
*bar.a = 3; //Leagal?
bar.b = 7; //Legal?
return 0;
}
size_t
中间变量。您可以简单地说int *t = (int *)bar.a;
,这将执行一个const_cast
(当然,假设bar.a
最初是指向常量的指针,这是假设)。消除常量性的能力并不是它一开始不存在的好理由。 - Adam H. Petersonconst
修饰符甚至const
本身都是荒谬的,因为你总是可以将其强制转换掉,并且你可以获得(几乎)任何对象的指针,然后取消const。我认为关于指针的const规则更好的理由是指向一个对象是一种关联而不是隐含的所有权,因此不应该是深层次的。 - Adam H. Petersonconst
有多脆弱。 - JaredPar