我確信我的一些問題可能之前已經被問過,所以請讓我知道:)。運算符重載並隱式轉換爲與安全布爾成語相關的布爾
首先,例如:
#include <iostream>
struct A
{
typedef void (A::*funcptr)();
operator funcptr() {
std::cout << "funcptr" << std::endl;
}
};
int main()
{
A a;
if (a) {}
}
在if(a)
,operator funcptr()
叫,但我不完全知道這裏發生了什麼。我假設編譯器尋找從A
到bool
的轉換,並找到operator functptr
這是好的,但轉換如何使用指向成員函數的指針?
另外,如果我改變operator funcptr()
到operator int A::*()
它也將工作,但operator void A::*
沒有(我得到cannot declare pointer to 'void' member
),什麼是我缺少的有規則? (我的問題主要涉及到試圖充分理解安全布爾成語)
此外,如果我宣佈operator bool()
它將優先,那麼有什麼優先規則?
這是你的工作,從'operator funcptr'返回'funcptr'的方式是 – 2012-01-27 05:48:11
@SethCarnegie:對,這只是一個例子來說明我的問題。 – 2012-01-27 05:51:16