C ++中的函数返回引用

时间:2015-10-17 22:33:27

标签: c++ return-value

double& squaredX (double x)
{
   return x*x;
}
  1. 这个功能的潜在问题是什么?
  2. 重写函数的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

  1. 这个功能的潜在问题是什么?
  2. 它没有编译,因为你不能将非const引用绑定到临时(这是x*x的结果,一个临时的int,并且返回类型为{{ 1}}甚至不兼容)并且即使你纠正了这一点,你也会返回一个不正确的局部变量的引用,因为当函数返回时变量超出了范围。

    1. 重写函数的最佳方法是什么?
    2. double&的类型为x*x,因此返回int

      是有意义的
      int

      int squaredX (int x) { return x*x; } 的结果可能太大而无法放入x*x,在这种情况下,您可能希望使用更大的类型进行计算并返回值。但这取决于具体情况。

答案 1 :(得分:0)

可能更好的一种方式"是使用模板和通用转发引用(C ++ 11或更新版本)。

 template<typename T>
 T square(const T&& x)
 {
     return x*x;
 }

T可以是doubleint8_tintMyComplexMath::Quaternion ......支持operator*的任何内容。它还支持通过引用传递,以防复制参数很昂贵。

可以说,这可能(正确地说)会吓跑人们,所以可能不会&#34;最好&#34;。它仍然没有解决溢出问题。