사소한 vs. 표준 레이아웃 vs. POD
평신도의 관점에서 사소한 유형, 표준 레이아웃 유형 및 POD의 차이점은 무엇입니까?
특히 템플릿 매개 변수 new T
와 다른지 여부를 확인하고 싶습니다 . 유형 특성의 어떤 , 그리고 내가 선택해야합니까?new T()
T
is_trivial
is_standard_layout
is_pod
(부차적 인 질문으로 이러한 유형 특성 중 컴파일러 마법없이 구현할 수 있습니까?)
나는 그것이 적어도 많은 추가 설명 없이는 진정한 평신도의 용어로 할 수 있다고 생각하지 않습니다 . 한 가지 중요한 점은 정적 대 동적 초기화이지만 평신도에게 설명하는 것은 그 자체로 여러 페이지가 될 것입니다.
POD는 C ++ 98에서 (잘못) 정의되었습니다. 실제로 두 가지 별개의 의도가 관련되어 있지만 잘 표현되지는 않았습니다. 1) C ++로 C 구조체 선언을 컴파일하면 C에서 얻은 것과 동일해야합니다. 2) POD는 정적 만 필요 / 사용합니다. (동적 아님) 초기화.
C ++ 0x / 11은 "사소한"및 "표준 레이아웃"을 위해 "POD"지정 (거의)을 완전히 삭제합니다. 표준 레이아웃은 C에서와 동일한 레이아웃으로 무언가를 만드는 첫 번째 의도를 캡처하기위한 것입니다. Trivial은 정적 초기화 지원을 캡처하기위한 것입니다.
이후 new T
대의 new T()
초기화와 거래, 당신은 아마도 합니다 is_trivial
.
컴파일러 마법이 필요한지 잘 모르겠습니다. 내 즉각적인 반응은 아마도 예일 것입니다. 그러나 사람들이 TMP로 한 일 중 일부를 알고 있으므로 누군가가 이것을 할 수 없다는 것을 확신하기가 어렵습니다 ...
편집 : 예를 들어 N3290의 예를 인용하는 것이 가장 좋습니다.
struct N { // neither trivial nor standard-layout
int i;
int j;
virtual ~N();
};
struct T { // trivial but not standard-layout
int i;
private:
int j;
};
struct SL { // standard-layout but not trivial
int i;
int j;
~SL();
};
struct POD { // both trivial and standard-layout
int i;
int j;
};
의심 할 여지없이 짐작할 수 있듯이 POD
POD 구조체이기도합니다.
POD 유형의 new T()
경우 value-initialization (모든 멤버 값 초기화)이고 new T
멤버를 초기화하지 않습니다 (default-initialization). 다른 형식의 초기화 간의 차이점 은이 질문을 참조하십시오 . 결론 : is_pod
.
참고 URL : https://stackoverflow.com/questions/6496545/trivial-vs-standard-layout-vs-pod
'Programing' 카테고리의 다른 글
R의 python dict에 해당 (0) | 2020.11.09 |
---|---|
PostgreSQL과 MySQL은 얼마나 다른가요? (0) | 2020.11.09 |
HTML 문서의 메타 데이터에 대한 모범 사례? (0) | 2020.11.09 |
포크 프로젝트를 github에 얼마나 오래 보관해야합니까? (0) | 2020.11.09 |
Python과 관련하여 WSGI, CGI, FastCGI 및 mod_python의 차이점과 용도는 무엇입니까? (0) | 2020.11.09 |