修改const对象的可变成员是否有效?

Kev*_*Cox 4 c++ const mutable

在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);
}
Run Code Online (Sandbox Code Playgroud)

Sha*_*our 5

是的,您可以修改const对象的可变成员,这在草案C++标准部分7.1.1 存储类说明符中有所说明:

类数据成员上的可变说明符使应用于包含类对象的const说明符无效,并允许修改可变类成员,即使该对象的其余部分是const(7.1.6.1).

关于C++性能技术报告部分7.1 ROMability涵盖了编译器可以将数据放入只读内存的情况.在这种情况下,这是不可能的,因为它显然不是一成不变的:

因此,ROMability的主题具有对所有程序的性能应用,其中程序的不可变部分可以放置在共享的只读空间中.