const void의 요점은 무엇입니까?
분명히 const void
다음을 반환하는 함수를 선언 할 수 있습니다 .
const void foo()
{
}
g ++ const
는 다음 코드가 컴파일되지 않기 때문에 중요한 것을 고려하는 것 같습니다 .
#include <type_traits>
static_assert(std::is_same<void(), const void()>::value, "const matters");
그래서 const void
실질적인 의미가 있습니까?
별로. 그러나 void에 대한 cv -qualifications 를 무시 하거나 오류를 만들면 컴파일러 구현 및 최종 사용자 코드 측면에서 불필요한 복잡성이 발생할 수 있습니다. 다음과 같은 템플릿 고려
template<typename T>
const T ...
이 시나리오에서 void를 사용하는 특별한 경우 (이미있는 것보다 더 많은 경우)를 만들 이유가 없습니다. 두통을 유발할뿐입니다.
또한 const void
도움이되지는 않지만 const void*
그 용도가 있습니다.
const void
컴파일러가 일반적인 규칙에 대한이 예외를 쫓아 내도록 만드는 이유가없고 그대로 두어도 해가되지 않기 때문에 허용됩니다.
위에 const void*
그다지 유용하지 않은 몇 가지 논의가 있습니다 .
const void *는 얼마나 유용합니까? 나는 void * const가 얼마나 될 수 있는지 볼 수 있지만 전자는 아닙니다. – 스피디
사실 const void*
때로는 필수적입니다. void* const
포인터 자체가 일정하다고 선언하고 가리키는 것은 아니라고 선언하는 것과는 반대로 가리키는 것은 읽기 전용임을 선언합니다.
내 경험으로 볼 때 상수 사용에 대한 포인터 const void*
는 두 가지 형식 중 더 유용합니다. 물론 const void* const
포인터와 그것이 가리키는 것 모두 일정하다는 의미도 있습니다.
void*
일반적으로 비 특정 포인터를 전달하는 방법으로 사용됩니다 (예 :) memcpy()
. const char*
그러한 함수에 a를 전달 하려면 사용할 수 없거나 void*
가리키는 것이 일정하고 변경할 수 없다는 사실을 잃게됩니다. 현재의 C ++ 컴파일러는 암시 적으로 캐스트해야하기 때문에 컴파일을 거부 할 것이며 const
,이 데이터가 읽기 전용 메모리에있을 수 있고 무언가 쓰기를 시도 할 경우 예외가 발생할 수 있기 때문입니다.
이것이 두 번째 주장 memcpy()
이 const void*
단순한 것이 아니라 이유 void*
입니다.
참고 URL : https://stackoverflow.com/questions/5057987/whats-the-point-of-const-void
'developer tip' 카테고리의 다른 글
GMail Chat은 클라이언트 상호 작용없이 어떻게 AJAX 요청을 할 수 있습니까? (0) | 2020.12.09 |
---|---|
정말 C #에서 CodeContracts를 좋아하려고합니다. (0) | 2020.12.09 |
SemaphoreSlim의 사용법을 이해해야합니다. (0) | 2020.12.09 |
net461이 유일한 프레임 워크로 설정된 ASP.NET Core 웹 애플리케이션 (.NET Core) 사용과 (.NET Framework) 템플릿 사용의 차이점 (0) | 2020.12.09 |
가비지 수집기가 Dispose ()를 호출합니까? (0) | 2020.12.09 |