【问题标题】:difference between double and double& in c++c++中double和double&的区别
【发布时间】:2021-11-07 21:22:52
【问题描述】:

我有以下函数来计算 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'

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

简单地返回 sum / size 和返回变量 double m = sum / size 有什么区别?我有一个模糊的想法,原因与doubledouble&amp; 类型之间的差异有关,但是返回m 与返回计算的双精度值不一样吗?任何帮助表示赞赏。

【问题讨论】:

  • 即使第一个似乎有效,它也是错误的。删除 &。
  • 是的,永远不会返回对局部变量的引用,引用“指向”的值将在调用后消失。

标签: c++ function pointers types reference


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    相关资源
    最近更新 更多