帮忙看下程序
#include"iostream"
using namespace std;
int& max(int& a,int& b);
void main()
{
int m=10,n=9;
max(m,n)=11;
cout<<m;
}
int& max(int& a,int& b)
{
return a>b?a:b;
}
在这个max的函数中,返回的是一个引用,但是我看到书上这样的赋值int& a=10;这样是不对的,编译器会说不能把常量赋值给int& 类型,但是改成const int&a=10; 这样就正确了,那我对上面的max(m,n)=11;这个语句不是很明白左边是一个引用,右边是常量值,那不就是跟int& a=10一样的性质吗,但是编译是正确的,请高手们解答,说的详细点,谢谢啦!
[解决办法]
你对 初始化 和 赋值 搞不清呀
int& a = xxx; 是初始化
a = 20; 是赋值
同理 max(m,n)=11; 是赋值
[解决办法]
int& a=10 相当于是定义一个引用a,将a与常量10绑定,但是你在声明a的时候,没有限制它是与常量绑定的,所以改成const int&a=10 就对了。
至于max(m,n)=11,是否可以理解为,max()返回的引用是已经定义过的,只是用11来重新修改它的值。这个还得想想 呵呵
[解决办法]
这道题不需要用引用啊,引用一般都和地址有关,和指针的联系很密切的。
而且没有“max(m,n)=11;“这种写法吧。表达式语句的左侧一般不是表达式的。
可以这样m = max(m,n);cout<<m;