作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我确定之前可能有人问过我的一些问题,所以请告诉我 :)。
先举个例子:
#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
),我在那里缺少的规则是什么? (我的问题主要与试图完全理解 safe bool 习语有关)
此外,如果我声明 operator bool()
它将优先,那么有什么优先规则?
最佳答案
回答你的第二个问题,如果你使用
operator int A::*() { }
然后您将创建一个转换运算符,它返回一个指向 int 成员的指针。不是指向成员函数的指针。因为你不能有类型为 void 的成员,
operator void A::*() { }
无效。
关于c++ - 与安全 bool 习语相关的运算符重载和隐式转换为 bool ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9029434/
场景如下: 我将我的应用程序运行所需的几个 .xml(某种配置)文件捆绑在一个 .jar 文件中。 jar 文件具有以下结构: settings-1.0.0.jar ˪ resources/ ˪
我是一名优秀的程序员,十分优秀!