const参数存储在哪里(C ++)? [重复]

问题描述 投票:-3回答:1
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;
}
c++ function reference
1个回答
1
投票

赞助,对于初学者来说,这是一个棘手的角落。首先要注意的是,只要语言规范没有真正谈论它,内存部分就不是真正相关的 - 它是编译器可以为自己做出的选择。

1的论据(2midpoint(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)

© www.soinside.com 2019 - 2024. All rights reserved.