X
다음과 같이 정의됩니다.
struct X
{
Y y;
// more fields...
int a;
};
유형의 변수가 X
있습니다. 그러나 함수에 전달하기 위해 첫 번째 멤버의 유형으로 캐스트하고 싶습니다. 나는 C 표준이 그것을 허용한다는 것을 알고있다 (그리고 C ++ 역시 그렇게한다고 생각한다).
CI에서는 다음과 같이 할 것입니다.
X x;
Y* y = (Y*) x;
doStuff(y);
C ++에서 어떤 유형의 캐스트가 이에 적합합니까? static_cast
또는 reinterpret_cast
?
컴파일러에서를 거부하지 않는 상황에서 static_cast
대신 사용 하는 것이 좋습니다 . 가능하다면 어떠한 캐스팅도하지 마십시오 .reinterpret_cast
static_cast
Y* y = &x.y
댓글에 답하려면 :
이 경우 PROCESS_MEMORY_COUNTERS_EX 변수가 있습니다. 그러나 WinAPI 함수 GetProcessMemoryInfo는 PROCESS_MEMORY_COUNTERS *를 사용합니다. 전자 유형은 후자와 똑같은 필드로 시작하여 끝에 몇 개를 추가합니다. 의도 된 사용법은 전자 (더 큰) 유형에 대한 포인터를 보유하고 있더라도 후자 유형에 대한 포인터를 함수에 전달하는 것입니다.
문서 GetProcessMemoryInfo ()에 대한 두 번째 매개 변수가 있음을 주장한다 :
프로세스의 메모리 사용량에 대한 정보를 수신하는 PROCESS_MEMORY_COUNTERS 또는 PROCESS_MEMORY_COUNTERS_EX 구조에 대한 포인터.
Win32 API는 C ++ API가 아니라 C API이므로 여기서 C 스타일 캐스트를 사용하거나 가급적이면 reinterpret_cast
의도를 명확하게하기 위해 a 를 사용할 수 있습니다. static_cast
이 경우 컴파일러에서 거부 될 것으로 예상 됩니다. 세 번째 cb
매개 변수는 실제로 제공 한 구조 유형을 함수에 알리기 위해 있습니다 . sizeof(PROCESS_MEMORY_COUNTERS)
또는 로 설정해야합니다 sizeof(PROCESS_MEMORY_COUNTERS_EX)
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다