sizeof
연산자 의 피연산자 가 평가되지 않으므로 다음을 수행 할 수 있습니다.
int f(); //no definition, which means we cannot call it
int main(void) {
printf("%d", sizeof(f()) ); //no linker error
return 0;
}
온라인 데모 : http://ideone.com/S8e2Y
즉, 함수 만 f
사용하는 경우 함수를 정의 할 필요가 없습니다 sizeof
. 이 기술은 C ++에서도 피연산자 sizeof
가 평가되지 않으므로 C ++ 템플릿 메타 프로그래밍에 주로 사용 됩니다.
왜 이것이 작동합니까? sizeof
연산자가 value 에서 작동하지 않기 때문에 작동 하지만 대신 표현식 유형 에서 작동 합니다. 따라서 당신이 쓸 때 sizeof(f())
, 그것은 표현식 의 타입 에서 작동 f()
하며 함수의 리턴 타입에 지나지 않습니다 f
. 함수가 실제로 실행될 경우 어떤 값을 반환하더라도 반환 유형은 항상 동일합니다.
C ++에서는 다음을 수행 할 수도 있습니다.
struct A
{
A(); //no definition, which means we cannot create instance!
int f(); //no definition, which means we cannot call it
};
int main() {
std::cout << sizeof(A().f())<< std::endl;
return 0;
}
에, 같은 그러나 그것은 보인다 sizeof
, 내가 처음의 인스턴스를 만드는거야 A
서면에 의해, A()
다음 함수를 호출 f
작성하여 인스턴스에를 A().f()
하지만, 그런 일이 발생하지 않습니다.
데모 : http://ideone.com/egPMi
다음은 다른 흥미로운 속성을 설명하는 또 다른 주제입니다 sizeof
.