私の知る限り、同じアクセス制御を持つ 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
これは私を驚かせました-1つのメンバーが全体の最適化をmutable
無効にします(何らかの方法ですべてのメンバーを作成します)?const
struct
mutable
struct
a の一部を読み取り専用メモリに格納し、他の部分を非読み取り専用メモリに格納して、C++ 標準メモリ レイアウトを尊重することは可能ですか?
これは、Windows 7 で Visual Studio 2010 を使用し、Ubuntu で GCC 4.7.2 を使用してテストされました。