code

const void 란 무엇입니까?

codestyles 2020. 9. 19. 11:14
반응형

const void 란 무엇입니까?


std::is_void상태에 대한 설명 :

T가 void, const void, volatile void 또는 const volatile void 형식 인 경우 true와 동일한 멤버 상수 값을 제공합니다 .

그런 다음 무엇을 할 수있는 const void, 또는 volatile void?

이 답변const void반환 유형이 유효하지 않을 것이라고 말합니다 (하지만 VC ++ 2015에서 컴파일됩니다)

const void foo() { }

표준에 따라 const void유효하지 않은 경우 (VC가 잘못됨)-다음은 무엇 const void입니까?


const void포인터를 형성 할 수있는 유형입니다. 일반적인 void 포인터와 비슷하지만 변환은 다르게 작동합니다. 예를 들어, a const int*는으로 암시 적으로 변환 될 수 없지만 암시 적 void*으로 const void*. 당신이있는 경우 마찬가지로, const void*당신은 할 수 없습니다 static_cast그것이로 int*,하지만 당신은 할 수 static_cast그것으로 const int*.

const int i = 10;
void* vp = &i;                           // error
const void* cvp = &i;                    // ok
auto ip = static_cast<int*>(cvp);        // error
auto cip = static_cast<const int*>(cvp); // ok

void, const void빈 공간 유형입니다. 그러나 const voidA는 반환 타입의이 const(! 법적이기는하지만) 의미는, 때문에 [EXPR] / 6 :

prvalue가 처음에 " cv T " 유형을 갖는 경우 , 여기서 Tcv-unqualified 비 클래스, 비 배열 유형 인 경우 표현식의 유형은 T추가 분석 전에 조정됩니다 .

그러나 이것은 유효한 유형 자체이며 예를 들어 C 표준 라이브러리 함수 에서 발생합니다. 여기서 인수 포인터의 const 정확성을 보장하는 데 사용됩니다 : int const*으로 변환 할 수 void*없지만 void const*.


유형은 템플릿의 결과 일 수 있습니다. 템플릿은 명시 수 const T및 인스턴스화 할 수 Tvoid.

연결된 대답은 비 템플릿 유형의 특수한 경우와 관련하여 오해되거나 제한적이며 의미const void 가 없을 수 있지만 유효한 코드 입니다.

참고 URL : https://stackoverflow.com/questions/37881240/what-is-const-void

반응형