구조체에 대한 포인터를 첫 번째 멤버로 캐스트하려면 어떤 유형의 C ++ 캐스트를 사용해야합니까?

아비브 콘

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_caststatic_castY* 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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

TOP 리스트

  1. 1

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  2. 2

    std :: regex의 일관성없는 동작

  3. 3

    JSoup javax.net.ssl.SSLHandshakeException : <url>과 일치하는 주체 대체 DNS 이름이 없습니다.

  4. 4

    PrematureCloseException : 연결이 너무 일찍 닫혔습니다.

  5. 5

    Xcode10 유효성 검사 : 이미지에 투명성이 없지만 여전히 수락되지 않습니까?

  6. 6

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  7. 7

    Ionic 2 로더가 적시에 표시되지 않음

  8. 8

    Seaborn에서 축 제목 숨기기

  9. 9

    C #에서 'System.DBNull'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다.

  10. 10

    복사 / 붙여 넣기 비활성화

  11. 11

    ArrayBufferLike의 typescript 정의의 깊은 의미

  12. 12

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  13. 13

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

  14. 14

    jfreecharts에서 x 및 y 축 선을 조정하는 방법

  15. 15

    PRNG 기간보다 순열이 더 많은 목록을 무작위로 섞는 방법은 무엇입니까?

  16. 16

    C # HttpWebRequest 기본 연결이 닫혔습니다. 전송시 예기치 않은 오류가 발생했습니다.

  17. 17

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  18. 18

    잘못된 구성 개체입니다. Webpack이 Angular의 API 스키마와 일치하지 않는 구성 개체를 사용하여 초기화되었습니다.

  19. 19

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  20. 20

    R의 마침표와 숫자 사이에 문자열 삽입

  21. 21

    Assets의 BitmapFactory.decodeStream이 Android 7에서 null을 반환합니다.

뜨겁다태그

보관