c – 为什么我的“显式运算符bool()”没有被调用?

c – 为什么我的“显式运算符bool()”没有被调用?,第1张

概述#include <iostream>using namespace std;struct A{ explicit operator bool() const { return true; } operator int() { return 0; }};int main(){ if (A()
#include <iostream>using namespace std;struct A{    explicit operator bool() const    {        return true;    }    operator int()    {        return 0;    }};int main(){    if (A())    {        cout << "true" << endl;    }    else    {        cout << "false" << endl;    }}

我的期望是A()将使用我的运算符bool()从上下文转换为bool,因此打印为true.

但是,输出为false,表示调用了运算符int().

为什么我的显式运算符bool未按预期调用?

解决方法 因为A()不是const,所以选择了运算符int().只需将const添加到其他转换运算符即可:
#include <iostream>using namespace std;struct A{    explicit operator bool() const    {        std::cout << "bool: ";        return true;    }    operator int() const    {        std::cout << "int: ";        return 0;    }};int main(){    if (A())    {        cout << "true" << endl;    }    else    {        cout << "false" << endl;    }}

Live Example打印:“bool:true”并且没有const它打印“int:false”

或者,创建一个命名常量:

// operator int() without constint main(){    auto const a = A();    if (a)    // as before}

@L_502_1@打印“bool:true”.

总结

以上是内存溢出为你收集整理的c – 为什么我的“显式运算符bool()”没有被调用?全部内容,希望文章能够帮你解决c – 为什么我的“显式运算符bool()”没有被调用?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1242016.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存