요약 : 은 bool
으로 변환되고 bool
은 int
으로 변환되므로 왜 nullptr
은 int
으로 변환되지 않습니까?nullptr을 int로 변환 할 수없는 이유는 무엇입니까?
void f(bool);
f(nullptr); // fine, nullptr converts to bool
그리고이 괜찮 :
이 코드는 괜찮
bool b;
int i(b); // fine, bool converts to int
왜이 괜찮 아닌가요?
void f(int);
f(nullptr); // why not convert nullptr to bool, then bool to int?
변환이 어떻게 되겠습니까? –
컴파일러는 전달한 것을 함수가 받아들이는 것에서 만 * 암시 적으로 변환합니다. 이것은 nullptr뿐만 아니라 본질적으로 모든 유형에 적용됩니다. 예를 들어,'char' 로의 변환을 가진 타입을 정의하고'int'를 취하는 함수에 그것을 전달하려고하면'char'으로 암시 적 변환을 지원하더라도 실패 할 것입니다. 'char'에서'int'로 암시 적으로 변환합니다. –
@JerryCoffin 컴파일러는 암시 적 변환을 두 번 이상 수행합니다. 사용자 정의 변환은 하나만 수행되지만 규칙에 따라 여러 번 다른 전환을 집계 할 수 있습니다. 최대 하나의 변환이 주어진 카테고리에 적용될 수있는 규칙이 있으며, 다양한 정수형에 대한'nullptr_t'와'bool'과'bool'은 모두 "Conversion"범주에 있습니다 (13.2.2.1.1 참조). –