C ++中double和double&的区别



我有以下函数来计算c++中的双精度[]的平均值:

double& Vector::mean() {
double sum = 0.0;
for (int i = 0; i < size; i++) {
sum += *(arr + i);
}
double m = sum / size;
return m;
}

this编译并运行,但this不能:

double& Vector::mean() {
double sum = 0.0;
for (int i = 0; i < size; i++) {
sum += *(arr + i);
}
return (sum / size);
}

有以下错误:

Non-const lvalue reference to type 'double' cannot bind to a temporary of type 'double'

这是在arr类型为double*的类中实现的。

简单返回sum / size和返回变量double m = sum / size有什么区别?我有一个模糊的想法,原因与类型doubledouble&之间的差异有关,但是,返回m不会与返回计算的双精度值相同吗?如有任何帮助,不胜感激。

使用double&表示您通过引用返回。这意味着该函数不是直接返回一个值,而是返回一个存储该值的内存位置,在大多数情况下,该位置会立即解引用并在调用代码中转换为一个值。由于sum/size是表达式而不是变量,因此无法识别地址,编译器会抛出错误。但是,m是一个变量,并且有一个可以返回的地址。但是,在这种情况下,当成员函数退出时,m立即脱离作用域,因此也不应该这样做。在这种情况下,返回double可能更合适,它直接向调用代码返回一个值。

相关内容

  • 没有找到相关文章

最新更新