在C ++中,您现在可以拥有mutable
个成员。这增加了一层"逻辑const"对语言。这些如何与只读数据相关 - 将mutable
成员阻止将const类放入.rodata
部分?
class Foo {
mutable int bar;
public:
Foo(): bar(0) {}
void set(int x) const { bar = x; }
};
// Can this be in a read-only section?
const Foo foo;
int main(void)
{
// Is this well-defined?
foo.set(5);
}
答案 0 :(得分:5)
是的,您可以修改const对象的可变成员,这在draft C++ standard部分7.1.1
存储类说明符中有所说明:
类数据成员上的可变说明符使const无效 说明符应用于包含类对象和许可 修改了可变类成员,即使其余部分也是如此 object是const(7.1.6.1)。
Technical Report on C++ Performance 部分7.1
ROMability 涵盖了编译器可以将数据放入只读内存的情况。在这种情况下,这是不可能的,因为它显然不是一成不变的:
因此,ROMability的主题对所有人都有性能应用 程序,其中程序的不可变部分可以放在一个 共享的只读空间。
答案 1 :(得分:2)
是mutable
成员可以在const方法中修改,并且很可能会删除该对象ROMability。还有其他要求使类ROMable的实例。有关详细信息,请参阅Techincal Report on C++ Perfomance第7章和here