내가 아는 한 C++에서 struct/class 멤버는 동일한 액세스 제어를 사용하여 선언 순서로 메모리에 저장됩니다. 이 예에서mutable member는 변경 불가능한 멤버에 대한 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;
}
프로그램 실행 및 인쇄이 개 임의의 숫자 : 다음 예제 m
및 c
은 다른 후 하나를 보관해야한다. mutable
을 제거하면 cx
이 읽기 전용으로 보호 된 메모리에 저장되어 있기 때문에 충돌합니다. 하나 개 mutable
회원은 전체 struct
(어떻게 든 모든 회원 mutable
을)에 대한 const
최적화를 사용하지 않습니다 -
struct
의 일부는 읽기 전용 메모리에 저장하고 다른 부분은 읽기 전용이 아닌 메모리에 저장할 수 있으며 C++ 표준 메모리 레이아웃을 존중합니까?
Windows 7의 Visual Studio 2010과 Ubuntu의 GCC 4.7.2를 사용하여 테스트되었습니다.
m (와)과 c (와)과 inx가 이전과 같이 readonly 메모리 내에없는 X() 생성자를 추가했습니다. 매우 흥미로운 통찰력, 감사합니다! – Felics