【发布时间】:2016-09-03 04:55:59
【问题描述】:
我想定义一个包含多个 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;
}
也会报错:
错误:无法分配给 const 成员函数 'f' 中的非静态数据成员
注意:成员函数 'main()::X::f' 在这里声明为 const 无效 f() 常量 { i = 1; }
【问题讨论】:
-
mutable 关键字仅对成员函数内部的成员有意义。
-
X没有名为i的数据成员。你确定这个例子重现了你的真实用例吗? -
@juanchopanza 我确定。我真的(相信我!)确实想对多个字段进行分组并同时将
mutable类型说明符应用于所有字段。 -
好吧,你不能那样做,因为
X没有名为i的成员。 -
@juanchopanza 我认为他使用了未命名的结构 as allowed by C11 但不是 C++。我猜这种非标准用法与标准 C++
mutable的混合不会按预期工作。
标签: c++ struct clang constants mutable