首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

重载解析,为什么优先匹配非const版本?该如何处理

2012-06-05 
重载解析,为什么优先匹配非const版本?下面这个小程序,运行结果是: operator s1()C/C++ code#includeiostr

重载解析,为什么优先匹配非const版本?
下面这个小程序,运行结果是: operator s1()

C/C++ code
#include<iostream>using namespace std;struct s;struct s1{    const s* m_s;};struct s{    operator s1()const{        cout << "operator s1() const" << endl;        return s1();    }    operator s1(){        cout << "operator s1()" << endl;        return s1();    }};void test(s1 obj){}int main(void){    test(s());    return 0;}

如果我去掉非const的版本,那么调用的结果就是:operator s1() const

这是为什么? C++标准有没有规定const和非const的那个在重载解析的过程中优先匹配?



[解决办法]
++
参数表括号后面的const 修饰的要this指向的对象,也可以说是调用对象。如果对象本身带有const修饰,就会优先重载const版本了,而你这里s()构造的临时对象并没有const修饰,所以优先选择非const版本,请看下面代码:
C/C++ code
#include<iostream>using namespace std;struct s;struct s1{    const s* m_s;};struct s{    operator s1()const{        cout << "operator s1() const" << endl;        return s1();    }    operator s1(){        cout << "operator s1()" << endl;        return s1();    }};void test(s1 obj){}int main(void){    const s sa;//这个const影响重载选择的版本    test(sa);    return 0;} 

热点排行