gpt4 book ai didi

c++ - 与安全 bool 习语相关的运算符重载和隐式转换为 bool

转载 作者:太空狗 更新时间:2023-10-29 21:49:07 25 4
gpt4 key购买 nike

我确定之前可能有人问过我的一些问题,所以请告诉我 :)。

先举个例子:

#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(),但我不确定这里发生了什么。我假设编译器寻找从 Abool 的转换并找到 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com