char
을 가리키는 데 필요한 정보가 int
(주소 지정이 불가능한 바이트를 가진 플랫폼이므로 char
에 대한 포인터는 단어에 대한 포인터를 저장할 필요가있는 것보다 더 많은 정보가 필요하다는 것을 알고 있습니다. 단어의 바이트 인덱스). 따라서 해당 플랫폼에서는 sizeof(int*) < sizeof(char*)
일 수 있습니다.비 유니온 클래스에 대한 포인터의 크기가 다를 수 있습니까?
non-union 클래스에 대한 포인터와 비슷한 것이 발생할 수 있습니까? C++은 가상 함수에서 공변 리턴 유형을 허용합니다. 이제 우리는이 같은 수업을 가정 해 봅시다 :
struct Gadget
{
// some content
};
struct Widget
{
virtual Gadget* getGadget();
};
getGadget()
가
Gadget*
를받을 때 작동하는 전화 코드,하지만 같은 코드 (실제로 같은
이진 코드를 컴파일이)가 포인터를받을 때 일해야
Gadget
(아마도 완전히 다른 라이브러리에 정의 된 라이브러리)에서 파생 된 유형으로 변환 할 수 있습니다. 합법적으로 볼 수있는 유일한 방법은 모든 비 유니언 클래스 유형 및 U
에 대해 sizeof(T*) == sizeof(U*)
입니다.
내 질문에 하나의 특정 플랫폼에서 특정 컴파일러 (가상의 Hell ++ 제외)가 주어진 경우 비공개 클래스 유형에 대한 모든 포인터가 동일한 크기가 될 것으로 예상하는 것이 합리적입니까? 아니면 컴파일러가 공변 반환 유형을 준수하면서 다른 크기를 사용하려는 이유가 있습니까? 포인터의 다른 "수준"(예 : __near
및 __far
으로) 존재 플랫폼
은, 모두에 적용되는 같은 속성을 가정합니다.
사이드 노트 : 데이터 포인터와 코드 포인터의 크기가 다른 임베디드 분야에는 많은 예제가 있습니다. – Lindydancer
@Lindydancer 물론. 하지만 나는 데이터 포인터에 대해서만 명시 적으로 요구하고 있으며, 그 부분 집합에 대해서만 요구하고있다. – Angew
@Casey'language-lawyer'가 이미 추가되고 한 번 제거되었습니다. 해당 사항이 확실합니까? 결국, 실용적인 바보 같은 일을하면서 표준의 서신을 따르는 가설적인 것이 아니라 실제 구현에 대해 묻고 있습니다. – Angew