을 가지고 내가 최근에 다음과 같은오버로드 생성자 - 부울 인수 constructur이 우선
class Foo {
public:
Foo(std::string msg) {}
private:
Foo(bool b) {}
};
같은 클래스 우연히 나는
Foo foo("blah");
원인에 의해이 클래스의 객체를 만들려고 것으로 나타났습니다 Foo::Foo(bool)
이 비공개임을 나타내는 컴파일 오류. 명백히 인수가 실제 std :: string이 아닌 경우 컴파일러는 bool
인수와 함께 생성자를 사용합니다. 반면에 private 생성자가 주어지지 않는다면, 위의 코드는 잘 컴파일됩니다.
"bool
-constructor"가 "string
-constructor"보다 우선하는 이유는 무엇입니까? 전달 된 인수의 유형이 그 중 어떤 유형에도 맞지 않는 이유는 무엇입니까? 이것은 정의의 문제일까요? 아니면 더 깊은 의미와 좋은 이유가 있습니까?
확실하지 * 관련 우선 검사의 깊이 설명에 훨씬 더를 가지고 비슷한 질문 왜 *하지만, 그들은 (아마도) 둘 다'명백해야한다 '. –
실제로, 명시 적 키워드는 동작을 변경하지 않습니다. – symphonic
이 경우에는 그렇지 않습니다. –