-1
なぜ出力されないのですか?私は出力と呼ばれる楽しみ(Test2)を期待していた。渡されるパラメータは関数のために異なるので、矛盾があってはいけません。C++演算子オーバーロードの競合
#include <iostream>
using namespace std;
class Test2
{
int y;
};
class Test
{
int x;
Test2 t2;
public:
operator Test2() { return t2; }
operator int() { return x; }
};
void fun (int x) { cout << "fun(int) called"; }
void fun (Test2 t) { cout << "fun(Test 2) called"; }
int main()
{
Test t;
fun(t);
return 0;
}
IMO、キャスト演算子は、C++言語の中で最も悪用される部分の1つです。また、コードを散りばめて書くと、どの関数が実際に呼び出されたのかわからないか、忘れてしまい予期しない実行パスをプログラムに導くことができます。たとえあなたのコードがコンパイルされたとしても、あなたはどの関数が呼び出されるのかも分かりませんでした。 – PaulMcKenzie