James McNellisの答えは本当にすべてをカバーしていましたが、より多くの説明があっても問題はありません (願っています)。
そう。
電話すると…
o.operator int()
…その場合、オーバーロードの選択はの constness にo
完全に依存します。
他には何もありません。
理由を確認するには、次のクラスを検討してください。
struct Bar
{
void f() {}
void f() const {}
};
技術的には、これらのメンバー関数はメンバー関数である必要はありません。それらは、独立した機能として選択された可能性もあります。しかし、彼らはBar
引数を必要とします:
struct Bar
{};
void f( Bar& ) {}
void f( Bar const& ) {}
そしてうまくいけば、あなたがそうするとき、それがより簡単にわかるようになりました
Bar o;
f( o );
最初の機能を選択できます。そしてそうです。2 番目の関数が選択された場合、最初の関数を取得できないためです。オブジェクトを にすると、最初のオブジェクトを選択すると正確さが失われるためですconst
。const
そのため、オブジェクトが 2 番目のオブジェクトconst
のみを選択できるため、そうでない場合はconst
1 番目のオブジェクトが選択されます。
要するに、このルールに代わる唯一の実際的な方法は、常に 2 番目のルールを選択することです。
乾杯 & hth.,