2017-04-04 88 views
0

考虑下面的代码:用const和non-const的回报重载函数引用

#include <cstdio> 

struct X 
{ 
    int a; 
}; 

struct Y 
{ 
    X x; 

    X& GetX() 
    { 
     printf("non-const version\n"); 
     return x; 
    } 

    X const& GetX() const 
    { 
     printf("const version\n", __FUNCTION__); 
     return x; 
    } 
}; 

int main() 
{ 
    Y y; 

    X& i = y.GetX(); 
    X const& j = y.GetX(); 

    return 0; 
} 

当代码:: Blocks的16.01跑,我得到:

non-const version 
non-const version 

我经常看到这样的代码在我工作的地方,你用不同的返回类型重载了函数。一个是参考,另一个是参考。

我的问题是:这种类型的编码的用途或好处是什么,如果const版本可以做的一切,非常量版本也可以做什么?我如何调用GetX()的const版本?在上面的例子中,非const版本总是被调用。

+1

函数重载不考虑返回类型。 –

+3

尝试制作'y' const –

+0

如果你只有一个const值,该怎么办? –

回答

0

y是非常量变量。所以调用非const方法。

如果将y2定义为const,它将调用const方法。

int main() 
{ 
    Y y; 
    const Y y2 = y; 

    X i = y.GetX(); 
    const X& j = y2.GetX(); 

    return 0; 
}