この例は「Thinking in C++」のものですが、演算子変換関数を合成するコンパイラに関する質問が1つあります。C++演算子オーバーロード合成変換
質問
クラスつの目的は、()(関数呼び出しFに)渡された場合、過負荷運転()が呼び出されます。しかし、私はこの変換を達成するためにコンパイラによって使用されたロジック(コンパイラはオペレーションコールを合成する)を作ることができません。
最大では、明示的な変換動作が期待できます。
1. obj3 =(3)obj4;
2. obj3 = 3(obj4)。
3。obj3 = static_cast <Three
>(obj4);
上記の変換のいずれかについて、コンパイラはどのように合成しますか?
(3)obj4.operator()?
多分私はいくつかの大きなポイントを見逃している可能性があります。
例
//: C12:Opconv.cpp
// Op overloading conversion
class Three {
int i;
public:
Three(int ii = 0, int = 0) : i(ii) {}
};
class Four {
int x;
public:
Four(int xx) : x(xx) {}
operator Three() const { return Three(x); }
};
void g(Three) {}
int main() {
Four four(1);
g(four);
g(1); // Calls Three(1,0)
} ///:~