실패 다음 bar b = 3
라인 (g ++ -fstd=gnu++11
와 4.7.1)에C =이 코드
class foo
{
int x;
public:
foo(int x) : x(x) { }
int get() const { return x; }
//...
};
class bar
{
int x;
public:
bar(const foo& x) : x(x.get()) { }
int get() const { return x; }
bar& operator =(const foo& rhs) { x = rhs.get(); return *this; }
//...
};
void func()
{
foo f = 3;
bar b = 3;
b = 7;
//...
}
오류 아웃 : 그러나
error: conversion from 'int' to non-scalar type 'bar' requested
, 나는 제공하고 있습니다 foo
을 취하는 bar
생성자와 ints는 앞에 선으로 표시된 것처럼 암시 적으로 foo
으로 변환 될 수 있습니다. 그래서, 무엇이 잘못 될까요?
덧붙여서, 몇 가지 이유 때문에 을 사용하여 foo
으로 강제 변환하는 것은 바람직하지 않습니다. 실제 코드를 사용하고 읽지 못하게하기 때문입니다.
C++에서는 둘 이상의 사용자 정의 변환과 관련된 암시 적 변환 경로를 허용하지 않습니다. –
@ n.m .: That is an _answer_ :) –