私の質問のいくつかは前に質問されている可能性がありますので、私に教えてください:)。オペレータのオーバーロードと安全なboolイディオムに関するboolへの暗黙的な変換
まず、例:if(a)
で
#include <iostream>
struct A
{
typedef void (A::*funcptr)();
operator funcptr() {
std::cout << "funcptr" << std::endl;
}
};
int main()
{
A a;
if (a) {}
}
、operator funcptr()
が呼び出されますが、私はここで何が起こっているのか正確にはわかりません。私は、コンパイラがA
からbool
への変換を探していると仮定していますが、operator functptr
は大丈夫ですが、変換はどのようにメンバ関数へのポインタで動作しますか?
また、私はoperator int A::*()
にoperator funcptr()
を変更した場合、それはまた、動作しますが、(私はcannot declare pointer to 'void' member
を取得)operator void A::*
ないだろう、私はそこに行方不明ですルールは何ですか? (私の質問は主に安全なブールのイディオムを完全に理解しようとすることに関連しています)
また、私がoperator bool()
と宣言した場合、それが優先されるので、優先順位の規則は何ですか?
途中で 'operator funcptr'から' funcptr'を返すのはあなたの仕事です。 –
@SethCarnegie:これは私の質問を示す単なる例です。 –