【发布时间】:2013-09-03 07:10:20
【问题描述】:
据我所知,在 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 成员是否会禁用整个 struct 的 const 优化(不知何故让所有成员 mutable)?
是否可以将struct 的一部分存储在只读内存中,而将其他部分存储在非只读内存中并遵守 C++ 标准内存布局?
这是使用 Windows 7 上的 Visual Studio 2010 和 Ubuntu 上的 GCC 4.7.2 测试的。
【问题讨论】: