무효 및 다른 불완전한 유형 사이의 아주 미묘한 차이가 실제로있다 :
struct T; // incompletely defined type
// incompletely defined types and void are incomplete types
T* x=nullptr; // pointer to incomplete type are valid, same for void pointers
T& tref=*x; // it's valid to have a reference to an incompletely defined type
void& vref; // it's INVALID to have a reference to void, because no object could ever be void
int f(void &vt); // INVALID function declaration with invalid parameter: void reference
int g(T& vt); // valid function declaration using a parameter: reference to incomplete type
C++ 표준은 인용 :
당신은 공공 형에 대한 참조를 가질 수 없습니다
가
3.9/5 : 선언되었지만 정의되지 않은 클래스 또는 알 수없는 크기 또는 불완전한 요소 유형의 배열은 입니다. ncompletely-defined 오브젝트 유형. 개체 유형 를 불완전하게 정의 된 보이드 종류 불완전한 유형
3.9/8이다 : 오브젝트 타입 (아마도 CV 수식) 그 기능 유형이 아닌 기준 유형이 아닌, 그리고 일종 void 형.
8.3.2/1 : 형식 "cv void에 대한 참조"를 지정하는 선언자가 잘못되었습니다. 이것은 C++ 표준에 설명되어 있습니다
(void)(3 + 5); // OK explicit conversion to void
(T)(3 + 5); // Invalid expression to an incomplete type
:
3.9
분명히 다른 불완전한 유형의 경우에는 해당되지 않습니다있는 어떤 표현이 무효로 변환 할 수 있습니다 .1/9 : 모든 표현식을 명시 적으로 cv 형식으로 변환 할 수 있습니다. void
왜 특히 이해해야합니까? – hobbs
참고로이 표준은 자습서가 아닙니다. 그러나 질문에 모호하지 않은 대답을 얻는 가장 좋은 방법입니다. –
분명히 당신이 찾고있는 것은 아니지만,'(void)'는 사용되지 않는 변수에 대한 경고음을 없애기 위해 사용될 수 있습니다. 내가해야하기 때문에 –