Programing

사소한 vs. 표준 레이아웃 vs. POD

lottogame 2020. 11. 9. 07:40
반응형

사소한 vs. 표준 레이아웃 vs. POD


평신도의 관점에서 사소한 유형, 표준 레이아웃 유형 및 POD의 차이점은 무엇입니까?

특히 템플릿 매개 변수 new T와 다른지 여부를 확인하고 싶습니다 . 유형 특성의 어떤 , 그리고 내가 선택해야합니까?new T()Tis_trivialis_standard_layoutis_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;
};

의심 할 여지없이 짐작할 수 있듯이 PODPOD 구조체이기도합니다.


POD 유형의 new T()경우 value-initialization (모든 멤버 값 초기화)이고 new T멤버를 초기화하지 않습니다 (default-initialization). 다른 형식의 초기화 간의 차이점 은이 질문을 참조하십시오 . 결론 : is_pod.

참고 URL : https://stackoverflow.com/questions/6496545/trivial-vs-standard-layout-vs-pod

반응형