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 有什么区别?我有一个模糊的想法,原因与类型 doubledouble& 之间的差异有关,但是,返回 m 不会与返回计算的双精度值相同吗?感谢您的帮助。

使用 double& 表示您正在 return 引用。这意味着函数 return 不是直接 returning 一个值,而是一个存储该值的内存位置,在大多数情况下,它会立即取消引用并在调用代码中转换为一个值。由于 sum/size 是表达式而不是变量,因此无法识别地址并且编译器会抛出错误。然而,m 是一个变量,并且有一个可以被 returned 的地址。但是,在这种情况下,成员函数退出时 m 立即超出范围,因此也不应这样做。在这种情况下,returndouble 可能更合适,其中 return 是调用代码的直接值。