如何在不调用成员函数的情况下修改对象?

R. *_*des 13 c++

在3.10/10,标准说:

为了修改对象,对象的左值是必要的,除了在某些情况下也可以使用类类型的右值来修改它的指示对象.[示例:调用对象(9.3)的成员函数可以修改对象.]

因此,除非在某些情况下,否则rvalues是不可修改的.我们被告知调用成员函数是其中一个例外.这给出了除了调用成员函数之外还有修改对象的方法的想法.我想不出办法.

如何在不调用成员函数的情况下修改对象?

Ale*_*s G 0

我可以想到一种方法:

如果您的类公开公共成员变量,您可以直接分配给这些成员变量。例如:

class A
{
    public:
        int _my_var;
...
};

int main(int argc, char** argv)
{
    A *a = new C();
    a->_my_var = 10;
}
Run Code Online (Sandbox Code Playgroud)

但这不是一种好的编程风格——我不会提倡甚至建议将成员变量公开为公共变量。

另外,如果你可以做一些非常奇怪的事情,例如直接在内存中写入一些地址,从指针到类对象的偏移量 - 但你为什么要这样做呢?

  • 这个答案与右值有什么关系? (5认同)
  • “另外,如果你能做一些非常奇怪的事情,比如直接在内存中写入一些地址,从指针到类对象的偏移量”怎么样?在你有机会之前,临时数据就不再存在了,而且它没有内存地址。 (2认同)