bool을 사용한 함수 오버로딩의 문자열 리터럴 모호성
bool 및 std::string 인수를 모두 허용하는 오버로드된 메서드를 정의할 때 개발자는 다음과 같은 문제가 발생할 수 있습니다. 문자열 리터럴을 제공할 때 예상치 못한 동작이 발생합니다. std::string 오버로드를 호출하는 대신 부울 오버로드가 우선시됩니다.
이 동작을 이해하려면 다음 상황을 고려하십시오.
<code class="cpp">class Output { public: static void Print(bool value) { std::cout << value ? "True" : "False"; } static void Print(std::string value) { std::cout << value; } }; Output::Print("Hello World");</code>
문자열 리터럴을 제공하더라도 Print( ) bool 오버로드가 포함된 메서드가 호출됩니다. 이는 C의 문자열 리터럴이 암시적으로 부울 값으로 변환될 수 있기 때문입니다. 특히 "Hello World"는 const char에 대한 포인터로 해석될 수 있는 const char* 배열이며, 이는 암시적으로 bool로 변환될 수 있습니다. 이 변환은 표준 변환 순서로 간주됩니다.
C는 사용자 정의 변환(예: std::string에서 bool로의 변환)보다 표준 변환 순서를 우선시합니다. C 표준(§13.3.3.2/2)에 따르면 표준 변환 순서는 항상 더 나은 변환 순서로 간주됩니다.
이 동작은 Print( ) 방법:
<code class="cpp">Output::Print(std::string("Hello World"));</code>
위 내용은 함수 오버로드에서 문자열 리터럴이 `bool` 오버로드를 트리거하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!