这个问题在这里已有答案:
double midpoint(const double &a, const double &b){
/*code*/
}
int main(){
double x=midpoint(1,2);
cout << x << endl;
}
现在在函数参数中,我使用引用调用。但在通过引用调用时,原始变量被修改。但是在这里,我使用函数参数作为数字本身。然后在哪个存储空间中存储了值?
另请注意,在这种情况下,代码会产生错误(从'int'类型的右值开始,无效初始化类型'int&'的非const引用)。
那么const
部分的功能到底是什么?
double midpoint(double &a, double &b){
/*code*/
}
int main(){
double x=midpoint(1,2);
cout << x << endl;
}
赞助,对于初学者来说,这是一个棘手的角落。首先要注意的是,只要语言规范没有真正谈论它,内存部分就不是真正相关的 - 它是编译器可以为自己做出的选择。
1
的论据(2
和midpoint(1, 2);
)是文字。这些被允许绑定(非正式地说,匹配)到const
引用,但不是引用。于是
double midpoint(const double &a, const double &b)
可以用文字调用但是
double midpoint(double &a, double &b)
不能。更糟糕的是,一些编译器允许引用绑定作为语言扩展!
最后,注意通过double
引用传递const
并没有太多的意义(有时它可以用来防止在调用站点进行类型转换);只需通过值传递它:
double midpoint(double a, double b)