我确信以前可能会问过我的一些问题,所以请告诉我:)。
首先,一个例子:
#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
),我缺少的规则是什么那里? (我的问题主要与试图完全理解安全的bool成语有关)
另外,如果我声明operator bool()
它会优先,那么优先级有哪些规则?
答案 0 :(得分:2)
要回答第二个问题,请使用
operator int A::*() { }
然后你要创建一个转换运算符,它返回一个指向int成员的指针。不是指向成员函数的指针。由于您不能拥有void类型的成员,
operator void A::*() { }
无效。