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