c++ - C++ 中的函数按值返回还是按引用返回?

标签 c++ function return

当一个函数(被调用者)返回一个数量给调用者函数时,它是由 值(value)还是引用?

问题是我编写了一个函数,它在调用时构建了一个非常大的 vector 。我想通过常量引用将这个大 vector 返回(在本例中为 main()),以便我可以对其进行进一步处理。

我很怀疑,因为有人告诉我,当 C++ 函数返回并终止时,与该函数关联的所有变量/内存都会被清除干净。

struct node{

string key;
int pnum;
node* ptr;
}

vector< vector<node> > myfun1(/*Some arguments*/)
{

/*Build the vector of vectors. Call it V*/

return v;

}

int main(void)
{
a=myfun1(/* Some arguments */)
}

最佳答案

C++ 函数可以按值、按引用(但不按引用返回局部变量)或按指针(同样,不按指针返回局部变量)返回。

当按值返回时,编译器通常可以进行优化,使其与按引用返回一样快,而不会出现悬空引用的问题。这些优化通常称为“返回值优化 (RVO)”和/或“命名返回值优化 (NRVO)”。

另一种方法是调用者提供一个空 vector (通过引用),并让函数填充它。然后它不需要返回任何东西。

您绝对应该阅读这篇博文:Want Speed? Pass by value.

关于c++ - C++ 中的函数按值返回还是按引用返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7456778/

相关文章:

perl - 返回 boolean 值的 Perl 函数实际上返回什么

c++ - 将二维字符串数组传递给 C++ 中的函数

c++, protected 抽象虚拟基纯虚拟私有(private)析构函数

function - 将参数作为函数中的变量传递时后台会发生什么

javascript - 有没有办法调用部分函数

c++ - 在方法中返回静态变量是个坏主意吗?

c++ - 是否有一个函数返回 glm 中两个 4x4 矩阵之间的变化

c++ - 一次性创建和初始化一个 vector 数组

c++ - Vector 算法中的字符串排序不起作用

python - 这两个代码有什么区别?