programing

공허한 게 무슨 소용이야?

kingscode 2022. 7. 16. 16:53
반응형

공허한 게 무슨 소용이야?

분명히 이건 기능으로 돌아오는 길을 선언하는 것이 가능하다.const void:

const void foo()
{
}

G++은 고려하는 것 같다.const중요하게, 때문에 다음 코드:을 수정하지 않는다.

#include <type_traits>

static_assert(std::is_same<void(), const void()>::value, "const matters");

그래서는다const void어떤 실용적인 중요성이 있나요?

const void전혀 없었기 때문에 지적하고 있는 컴파일러가 해를 주는 것은 일반적인 규칙 이 한가지 예외를 킥은 수 있나.

그 위에 몇몇 토론하고 있다.const void*매우 유용한 게 아닙니다.

const void *는 얼마나 유용합니까?나는 얼마나 공허할 수 있는지 알 수 있지만 전자는 그렇지 않다.–스파이디

실은.const void*가끔 필수적이다.따라에 반대하는 것은 그 물건을 가리켰다 읽다를 선언하고 있습니다.void* const자긴은 포인터 자체가 아닌 그것에 있는 것이 아니 가리키는 것 일정하다 말한다.

내 경험을 통해 상수를 사용하여, 포인터입니다.const void*갈수록 두가지 형태 중 유용합니다.물론, 있다.const void* const는 이 속성이 가리키는 두 포인터와 것은 변함 없담을 의미한다.

void*보통 방법으로 주위에(예를 들어와 비특이적 조언을 통과하는 데 사용됩니다.memcpy()를 통과하고 싶은 경우const char*그런 기능에는 사용할 수 없습니다.void*또는 가리키는 것이 일정하고 변경할 수 없다는 사실을 잃게 됩니다.현재의 C++ 컴파일러는 컴파일러의 컴파일을 거부합니다.이는 암묵적으로 캐스트해야 하기 때문입니다.const이 데이터는 읽기 전용 메모리에 있을 수 있으며 쓰기 시도 시 예외가 발생할 수 있습니다.

이래서 두 번째 주장은memcpy()const void*단순한 것이 아니라void*.

사실 그렇지 않아요.그러나 cv-qualifications를 무효로 무시하거나 오류를 발생시키는 것은 컴파일러 구현과 최종 사용자 코드 양면에서 불필요한 복잡성을 야기할 수 있습니다.다음과 같은 템플릿을 고려합니다.

  template<typename T>
  const T ...

이 시나리오에서 사용을 무효로 할 이유는 없습니다(이미보다 더 많은 경우). 골칫거리만 생길 뿐입니다.

또, 한편으로const void도움이 되지 않습니다.const void*용도가 있습니다.

언급URL : https://stackoverflow.com/questions/5057987/whats-the-point-of-const-void

반응형