You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

const_cast与mutable对比及未定义行为:含mutable的const对象是否触发未定义行为?

关于const对象与mutable成员的未定义行为疑问

编辑说明:我修改了代码,不再使用指针,因为之前有太多无关的评论

#include <iostream>

struct Foo {
    Foo(const int a) : total(a) {}

    int       index = 0;
    const int total;
};

struct Bar {
    Bar(const int a) : total(a) {}

    mutable int index = 0;
    const int   total;
};

int main() {
    const Foo foo(3);
    for (
        ;
        foo.index < foo.total;
        const_cast<Foo*>(&foo)->index++ // 1. 未定义行为,因为foo是const对象
    )
        std::cout << "Foo " << foo.index << std::endl;

    const Bar bar(3);
    for (
        ;
        bar.index < bar.total;
        bar.index++ // 2. 因mutable修饰,不属于未定义行为?
    )
        std::cout << "Bar " << bar.index << std::endl;

    return 0;
}

我已知标记为// 1. 未定义行为,因为foo是const对象的代码行属于未定义行为——foo是const对象,却通过const_cast强制修改其非mutable成员。

但我不确定标记为// 2. 因mutable修饰,不属于未定义行为?的代码行是否存在潜在未定义行为,它通过mutable修饰成员而非const_cast实现了对const对象成员的修改。

想向技术同行确认:是否存在某些场景,使得包含mutable成员的const对象会引发未定义行为?

内容的提问来源于stack exchange,提问作者user1722025

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 22:37:23