c++中double和double&的区别
difference between double and double& in c++
我有以下函数来计算 c++ 中 double[] 的平均值:
double& Vector::mean() {
double sum = 0.0;
for (int i = 0; i < size; i++) {
sum += *(arr + i);
}
double m = sum / size;
return m;
}
这个可以编译和运行,但是这个不能:
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'
这是在 class 中实现的,其中 arr
的类型为 double*
。
简单返回 sum / size
和返回一个变量 double m = sum / size
有什么区别?我有一个模糊的想法,原因与类型 double
和 double&
之间的差异有关,但是,返回 m
不会与返回计算的双精度值相同吗?感谢您的帮助。
使用 double&
表示您正在 return 引用。这意味着函数 return 不是直接 returning 一个值,而是一个存储该值的内存位置,在大多数情况下,它会立即取消引用并在调用代码中转换为一个值。由于 sum/size
是表达式而不是变量,因此无法识别地址并且编译器会抛出错误。然而,m
是一个变量,并且有一个可以被 returned 的地址。但是,在这种情况下,成员函数退出时 m
立即超出范围,因此也不应这样做。在这种情况下,returndouble
可能更合适,其中 return 是调用代码的直接值。
我有以下函数来计算 c++ 中 double[] 的平均值:
double& Vector::mean() {
double sum = 0.0;
for (int i = 0; i < size; i++) {
sum += *(arr + i);
}
double m = sum / size;
return m;
}
这个可以编译和运行,但是这个不能:
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'
这是在 class 中实现的,其中 arr
的类型为 double*
。
简单返回 sum / size
和返回一个变量 double m = sum / size
有什么区别?我有一个模糊的想法,原因与类型 double
和 double&
之间的差异有关,但是,返回 m
不会与返回计算的双精度值相同吗?感谢您的帮助。
使用 double&
表示您正在 return 引用。这意味着函数 return 不是直接 returning 一个值,而是一个存储该值的内存位置,在大多数情况下,它会立即取消引用并在调用代码中转换为一个值。由于 sum/size
是表达式而不是变量,因此无法识别地址并且编译器会抛出错误。然而,m
是一个变量,并且有一个可以被 returned 的地址。但是,在这种情况下,成员函数退出时 m
立即超出范围,因此也不应这样做。在这种情况下,returndouble
可能更合适,其中 return 是调用代码的直接值。