Dar*_*bik 11 c++ const undefined-behavior
假设我有一个结构定义:
struct thing
{
thing* x;
int z;
thing() : x(this), z(0) {}
void foo() const
{
this->x->z++;
}
};
Run Code Online (Sandbox Code Playgroud)
请注意,我创建了一个指向自己的可变指针(邪恶的笑)
然后我可以像这样使用它:
int main()
{
const thing c;
c.foo();
assert(c.z == 1);
c.foo();
assert(c.z == 2);
return c.z;
}
Run Code Online (Sandbox Code Playgroud)
而且你可以看到我似乎可以改变一个恒定的值......这是UB吗?
T.C*_*.C. 10
[dcl.type.cv] P4:
除了
mutable可以修改任何声明的类成员([dcl.stc])之外,任何修改([expr.ass],[expr.post.incr],[expr.pre.incr])const对象的尝试([basic] .type.qualifier])在其生命周期内([basic.life])导致未定义的行为.
[basic.type.qualifier] P1:
甲const对象是类型的对象
const T或这样的对象的非易变的子对象.
c.z是一个const对象,因为它是一个不可变的子对象c.您的代码尝试在其生命周期内对其进行修改.因此,代码具有未定义的行为.
| 归档时间: |
|
| 查看次数: |
315 次 |
| 最近记录: |