据我所知,在 C++ 中,具有相同访问控制的结构/类成员按声明顺序存储在内存中。是下一个示例m
,c
应该一个接一个地存储:
#include <cstdlib>
#include <iostream>
struct X
{
mutable int m;
int c;
};
const X cx = {0, 1};
int main()
{
X& x = const_cast<X&>(cx);
x.m = rand();
x.c = rand();
std::cout<<x.m<<" "<<x.c;
}
在此示例中,程序运行并打印 2 个随机数。如果我删除mutable
它会崩溃,因为cx
它存储在只读受保护的内存中。
这让我想知道 - 一个mutable
成员是否会禁用const
整个优化struct
(不知何故让所有成员mutable
)?
是否可以将 a 的一部分存储struct
在只读内存中,将其他部分存储在非只读内存中并遵守 C++ 标准内存布局?
这是使用 Windows 7 上的 Visual Studio 2010 和 Ubuntu 上的 GCC 4.7.2 测试的。