gpt4 book ai didi

c++ - 恒定值变化

转载 作者:可可西里 更新时间:2023-11-01 15:16:40 25 4
gpt4 key购买 nike

假设我有一个结构定义:

struct thing
{
thing* x;
int z;

thing() : x(this), z(0) {}
void foo() const
{
this->x->z++;
}
};

请注意,我创建了一个指向我自己的可变指针(邪恶的笑)

然后我可以像这样使用它:

int main()
{
const thing c;
c.foo();
assert(c.z == 1);
c.foo();
assert(c.z == 2);
return c.z;
}

如您所见,我似乎可以更改一个常量值......这是 UB 吗?

最佳答案

[dcl.type.cv]p4:

Except that any class member declared mutable ([dcl.stc]) can be modified, any attempt to modify ([expr.ass], [expr.post.incr], [expr.pre.incr]) a const object ([basic.type.qualifier]) during its lifetime ([basic.life]) results in undefined behavior.

[basic.type.qualifier]p1:

A const object is an object of type const T or a non-mutable subobject of such an object.

c.z 是一个 const 对象,因为它是 c 的一个不可改变的子对象。您的代码试图在其生命周期内对其进行修改。因此,代码具有未定义的行为。

关于c++ - 恒定值变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52710231/

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