Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C++;没有超出范围?_C++ - Fatal编程技术网

C++ 如何在C++;没有超出范围?

C++ 如何在C++;没有超出范围?,c++,C++,我正在编写代码来求两个向量的和: // Vector operations TIntV& FindSum(const TIntV& v1, const TIntV& v2) { AssertR(v1.Len() == v2.Len(), TStr::Fmt("Vector lengths unequal")); TIntV vSum = TIntV(v1); for (int i = 0; i < vSum.Len(); i++) { vSum[

我正在编写代码来求两个向量的和:

// Vector operations
TIntV& FindSum(const TIntV& v1, const TIntV& v2) {
  AssertR(v1.Len() == v2.Len(), TStr::Fmt("Vector lengths unequal"));
  TIntV vSum = TIntV(v1);
  for (int i = 0; i < vSum.Len(); i++) {
    vSum[i] += v2[i];
  }
  return vSum;
}

返回变量而不使其超出范围的最佳方法是什么?还有,为什么我们可以返回整数、浮点等而不必担心这个问题呢?

关键在于方法签名:

TIntV& FindSum(const TIntV& v1, const TIntV& v2)
这表示“我正在返回对
TIntV
的引用”

换成

TIntV FindSum(const TIntV& v1, const TIntV& v2)

您应该没事。

关键在于您的方法签名:

TIntV& FindSum(const TIntV& v1, const TIntV& v2)
这表示“我正在返回对
TIntV
的引用”

换成

TIntV FindSum(const TIntV& v1, const TIntV& v2)

你应该没事。

只是不要通过引用返回。我以为我是通过值返回的?我将vSum声明为TIntV,而不是TIntV&@EEEE:您的函数返回类型为
TIntV&
。出于好奇,当返回类型为TIntV时,为什么他们允许我返回TIntV&?只是不要通过引用返回它。我以为我是通过值返回的?我将vSum声明为TIntV,而不是TIntV&@eeee:您的函数返回类型是
TIntV&
。出于好奇,当返回类型是TIntV&时,他们为什么允许我返回TIntV?没问题!如果这对你有帮助,记得接受答案。没问题!如果这对你有帮助,记得接受答案。