在 3.10/10 中,该标准表示:
为了修改对象,对象的左值是必需的,但在某些情况下,类类型的右值也可用于修改其所指对象。 [示例:为对象调用的成员函数(9.3)可以修改该对象。 ]
因此,除非在某些情况下,右值是不可修改的。我们被告知调用成员函数是这些例外之一。这给出了除了调用成员函数之外还有修改对象的方法的想法。我想不出办法。
如何在不调用成员函数的情况下修改对象?
如何在不调用成员函数的情况下修改对象[由右值表达式指定]?
我知道只有一种方法可以做到这一点,即将对象绑定到对的引用const
,然后丢弃const
-ness.
E.g.
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)。
EDIT, 添加:吕克·丹东 https://stackoverflow.com/questions/6466624/how-can-you-modify-an-object-without-calling-member-functions/6467332#6467332的答案显示了另一种(非通用)方式,即临时结构在某个可访问位置存储一些指向对象的引用或指针。
干杯,
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)