读书人

重载解析,为什么优先匹配非const版本?

发布时间: 2012-06-05 13:54:06 作者: rapoo

重载解析,为什么优先匹配非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;} 

读书人网 >C++

热点推荐