2013-04-13 13 views
7

는 :C++ 표준 레이아웃 및 참조

가 된 타입의 비 정적 데이터 멤버가 아닌 표준 - 있죠, 맞아요 :

표준 레이아웃 클래스는 그 클래스이다 레이아웃 클래스 (또는 이러한 유형의 배열) 또는 참조 참조

어떤 특성 (들)은 표준 레이아웃 클래스의 정의에 포함되는 참조 회원들과 클래스를 방지?

+0

이러한 속성이 필요하다고 가정하고 있습니까? 그럴 필요가 없습니다 ... – Yakk

+0

"예방"은 강한 단어입니다. 하나의 관점에서, 참조는 컴파일러에게 구조체를 추상 데이터 형식으로 취급하는 대신 좋은 변명을 제공합니다. 스토리지 레이아웃 사양. 참고 자료에는 자신의 * 모든 저장 공간이 필요하지 않습니다. – jthill

답변

11

표준 레이아웃 클래스는 모두 메모리에 특정 유형에 대한 레이아웃이 잘 정의되어 있습니다. C++에서 참조는 객체가 아니므로 구현 프로그램이 일반적으로 구현을위한 특정 구현 유형의 저장 공간을 가져야한다고하더라도 해당 프로그램에서 잘 정의 된 방식으로 액세스 할 수있는 저장소가 없습니다.

이런 이유로 참조 번호가 표준 레이아웃이어야하는 항목에 참조 멤버가 포함되어 있지 않습니다.

이 언급은 C++ 메모리 모델에 대한 섹션의 표준에서 비 규범적인 참고있다 :

[참고 : 이러한 참조 및 가상 함수와 같은 언어의 다양한 기능을 추가로 포함 할 수는 프로그램에 액세스 할 수 없지만 구현에 의해 관리되는 메모리 위치 -end note]

+0

위대한 답변에 감사드립니다. 그 말이 완벽합니다. – TRISAbits