Насколько я знаю, в C++ структуры/члены класса с тем же контролем доступа хранятся в памяти в порядке объявления. Является ли следующий пример m
и c
должны храниться один за другим:Изменяет ли mutable-член const оптимизацию констант для неперемещаемых членов?
#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
)?
Возможно ли хранить части struct
в памяти только для чтения и других частях памяти без чтения и уважать стандартную память памяти C++?
Это было протестировано с использованием Visual Studio 2010 в Windows 7 и GCC 4.7.2 на Ubuntu.
Я добавил конструктор X(), который inits m и c и cx не находится в памяти readonly, как это было раньше. Очень интересное понимание, спасибо! – Felics