형식 연역

·4일 전
0

C++

목록 보기
17/17
  • 형식 연역이란?
    - 컴파일러가 변수나 함수의 타입을 자동으로 추론하는 과정
    - 함수 템플릿 호출 지점, auto, decltype 표현식 등에서 발생함

  • 템플릿 형식 연역 규칙

    • 컴파일러는 expr를 이용하여 T와 paramType을 연역함

    • (경우 1) paramType이 포인터 또는 참조 형식이지만 보편 참조는 아닌 경우

      • 규칙
        • expr 형식이 참조 형식이면 참조 부분 무시
    • (경우 2) paramType이 보편 참조인 경우

      • 규칙
        • expr가 lvalue면 T와 paramType 둘 다 lvalue 참조로 연역
        • expr가 rvalue면 (경우 1)의 규칙 적용 (참조, const, volatile 떼기)
    • (경우 3) paramType이 포인터도 아니고 참조도 아닌 경우

      • 규칙
        • expr 형식이 참조면 참조 부분 무시
        • expr 형식과 paramType을 비교하여 T의 형식 추론 (const, volatile 한정자 제거)
    • (그 외)

      • 배열 인수

        • 배열 형식은 포인터 형식과 다름
          • 맞바꿔 쓸 수 있는 것처럼 보이는 건 많은 문맥에서 배열이 배열의 첫 원소를 가리키는 포인터로 붕괴하기 때문
        • 규칙
          • 값 전달 매개변수가 있는 템플릿은 함수 호출 시 배열의 첫 번째 원소를 가리키는 포인터로 자동 변환됨
          • 참조 매개변수가 있는 템플릿은 배열이 붕괴되지 않고 그대로 전달됨
      • 함수 인수

        • 함수 형식도 함수 포인터로 붕괴할 수 있음
        • 규칙
          • 값 전달 매개변수가 있는 템플릿은 함수 포인터로 연역됨
          • 참조 매개변수가 있는 템플릿은 함수 참조로 연역됨
post-custom-banner

0개의 댓글