加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 奇怪的运算符重载行为?

发布时间:2020-12-16 04:52:37 所属栏目:百科 来源:网络整理
导读:#include iostreamusing namespace std;class Foo{ string _s; public: Foo(string ss){ _s = ss; } Foo operator=(bool b){ cout "bool" endl; return *this; } Foo operator=(const string ss){ cout "another one" endl; return *this; }};int main(){ Fo
#include <iostream>
using namespace std;

class Foo{

        string _s;
        public:
        Foo(string ss){
                _s = ss;
        }
        Foo& operator=(bool b){
                cout << "bool" << endl;
                return *this;
        }
        Foo& operator=(const string& ss){
                cout << "another one" << endl;
                return *this;
        }
};


int main(){

        Foo f("bar");
        f = "this";
        return 0;

}

我有重载=运算符.我期待f =“这个”;调用operator =(const string& ss)重载的语句.但事实并非如此.它调用operator =(bool b)重载.为什么?

解决方法

这个运算符operator =(const string& ss)需要转换用户定义的参数类型(const char *到std :: string),而bool版本没有,所以提供了更好的匹配:你得到了转换内置类型const char [5]到const char *到bool.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读