gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:02:11 25 4
gpt4 key购买 nike

在 3.10/10,标准说:

An lvalue for an object is necessary in order to modify the object except that an rvalue of class type can also be used to modify its referent under certain circumstances. [Example: a member function called for an object (9.3) can modify the object. ]

因此,除非在某些情况下,否则右值是不可修改的。我们被告知调用成员函数是这些异常(exception)之一。这给出了一个想法,即除了调用成员函数之外,还有其他方法可以修改对象。我想不出办法。

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

最佳答案

How can one modify an object [that's specified by an rvalue expression] without calling a member function?

我知道只有一种方法可以做到这一点,即将对象绑定(bind)到对 const 的引用,然后抛弃 const-ness。

例如

template< class Type >
Type& tempRef( Type const& o ) { return const_cast< Type& >( o ); }

struct S { int x; };

int main()
{ tempRef( S() ).x = 3; }

这是因为临时对象不是const本身,除非它是const类型,所以上面的例子并没有抛弃原来的const-ness(应该是 UB)。

编辑,添加:Luc Danton的回答显示了另一种(非一般)方式,即临时结构将一些引用或指向对象的指针存储在某个可访问的位置。

干杯,

关于c++ - 如何在不调用成员函数的情况下修改对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6466624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com