我想定义一个带有多个 mutable
字段的聚合体(以便将其保存在 std::set
或 std::priority_queue
中并在将来进行修改,同时确保保存容器不变量)。我尝试了下面的语法并且它成功编译:
#include <cstdlib>
int
main()
{
struct X
{
mutable struct
{
int i;
int j;
};
};
X const x{};
//x.i = 1;
return EXIT_SUCCESS;
}
但是语句x.i = 1;
会出错:
错误:无法将具有const限定类型“const X”的变量“x”赋值。
我的意图是将许多连续的字段分组,并对该组应用mutable
关键字。
这种语法是否有误?如果是,编译器制造商允许这样的语法的目的是什么?
补充说明:
代码:
#include <cstdlib>
int
main()
{
struct X
{
mutable struct
{
int i;
int j;
};
void f() const { i = 1; }
};
X const x{};
//x.i = 1;
x.f();
return EXIT_SUCCESS;
}
也会产生错误:
错误:无法在常量成员函数“f”中分配非静态数据成员
注意:成员函数“main()::X::f”在此处声明为const void f() const { i = 1; }
X
没有名为i
的数据成员。您确定这个示例能够复现您的实际使用情况吗? - juanchopanza