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
相关产品推荐
相关产品推荐

