이렇게 선언된 구조체 MYST의 크기를 출력해보면 C 에서는 0, C++ 에서는
3으로 찍히는 것을 알수 있습니다. class의 멤버로 해도 마찬가지구요.
제 생각에는 C++에서는 크기가 0인 객체를 불허하는 것으로 보이는데,
정확한 C++컴파일러의 이론을 따져봐야겠지요.
is perfectly legal. This type of construct is useful when developing a skeleton or placeholder for a class.
An empty class has size greater than zero. Two class objects of empty classes will have distinct addresses, as in:
class A {};
void f()
{
A* p1 = new A;
A* p2 = new A;
// p1 != p2 at this point ...
}
There are still one or two C++ compilers that generate C code as their "assembly" language. To handle an empty class, they will generate a dummy member, so, for example:
제가 똑같은 질문을 했었습니다http://bbs.kldp.org/
제가 똑같은 질문을 했었습니다
http://bbs.kldp.org/viewtopic.php?p=16641&highlight=#16641
C++에서는 size=0 인 객체는 없는듯합니다.
아마 같은 null structure를 C에서 컴파일 해보셨다면 sizeof의 값이 0
인 것을 확인하셨을 겁니다. C++ 에서는 크기가 0인 객체는 컴파일러
자체가 허락하지 않는듯 합니다.
재미있는 것은 아래와 같은 예제인데
typedef struct _NIL {
} NIL;
typedef struct _MYST {
NIL n;
NIL nn;
NIL nnn;
} MYST;
이렇게 선언된 구조체 MYST의 크기를 출력해보면 C 에서는 0, C++ 에서는
3으로 찍히는 것을 알수 있습니다. class의 멤버로 해도 마찬가지구요.
제 생각에는 C++에서는 크기가 0인 객체를 불허하는 것으로 보이는데,
정확한 C++컴파일러의 이론을 따져봐야겠지요.
homeless
RE:
http://www.codeproject.com/atl/atl_underthehood_.asp?target=zeeshan%7Camjad
링크된 페이지의 내용을 살펴보시면 이해하시는데 도움이 되리라 생각됩니다..
좋은하루 되세요
Empty Classes and Structs
http://www.usenix.org/publications/login/1997-12/cplusplus.html
에서 인용한 겁니다.
어찌나 졸린지..~~
댓글 달기