그래서 변환 연산자와 생성자에 대한 몇 가지 질문을 통해 저에게 상호 작용에 대해 생각해 보았습니다. 즉 '모호한'호출이있을 때입니다. 다음 코드를 고려하십시오.변환 생성자 대 변환 연산자 : 우선 순위
class A;
class B {
public:
B(){}
B(const A&) //conversion constructor
{
cout << "called B's conversion constructor" << endl;
}
};
class A {
public:
operator B() //conversion operator
{
cout << "called A's conversion operator" << endl;
return B();
}
};
int main()
{
B b = A(); //what should be called here? apparently, A::operator B()
return 0;
}
위의 코드는 "A의 변환 연산자"라고 표시합니다. 즉, 변환 연산자가 생성자와 달리 호출됩니다. operator B()
코드를 A
에서 제거/주석 처리하면 컴파일러는 대신 코드를 변경하지 않고 생성자를 사용하여 기꺼이 전환합니다.
내 질문은 :
- 컴파일러는 모호한 전화로
B b = A();
을 고려하지 않기 때문에, 여기에 직장에서 우선 순위의 몇 가지 유형이 있어야합니다. 이 우선 순위는 정확히 어디에 설정되어 있습니까? (C++ 표준의 참조/인용문은 인정 될 것입니다.) - 객체 지향 철학적 관점에서 보면 코드가 어떻게 동작해야합니까?
A
개체가B
개체 인A
또는B
이되는 방법에 대해 더 알고있는 사람은 누구입니까? C++에 따르면 대답은A
입니다. 객체 지향적 인 실습에 이것이 있어야한다고 제안하는 것이 있습니까? 개인적으로 나에게도 의미가있을 것입니다. 그래서 선택이 어떻게 이루어 졌는지 알고 싶습니다.
사전
당신은 초기화를 복사 할
당신이 주석 라인 "//이 생성자를 복사는"그것은 생성자, 복사 생성자되지 않습니다 : 다음 코드는 여전히 B의 생성자를 호출하기 때문에 아마도 그것은, 임시직에 대한 몇 가지 특별한 행동을 가지고있다. –
네가 맞아, 나는 그 용어를 오용 했어. 나는 그것을 편집했다. – GRB