我有以下函数来计算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
有什么区别?我有一个模糊的想法,原因与类型double
和double&
之间的差异有关,但是,返回m
不会与返回计算的双精度值相同吗?如有任何帮助,不胜感激。
使用double&
表示您通过引用返回。这意味着该函数不是直接返回一个值,而是返回一个存储该值的内存位置,在大多数情况下,该位置会立即解引用并在调用代码中转换为一个值。由于sum/size
是表达式而不是变量,因此无法识别地址,编译器会抛出错误。但是,m
是一个变量,并且有一个可以返回的地址。但是,在这种情况下,当成员函数退出时,m
立即脱离作用域,因此也不应该这样做。在这种情况下,返回double
可能更合适,它直接向调用代码返回一个值。