我确信我的一些问题可能之前已经被问过,所以请让我知道:)。运算符重载并隐式转换为与安全布尔成语相关的布尔
首先,例如:
#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