gpt4 book ai didi

c++ - 对 C++ 从函数返回引用的困惑

转载 作者:太空狗 更新时间:2023-10-29 23:35:00 25 4
gpt4 key购买 nike

我一直对 C++ 中的引用感到困惑,所以我用以下函数做了一些实验

std::vector<float> & fun(std::vector<float> & x) {
return x;
}

然后我使用以下两种方式调用该函数:

std::vector<float> x(10000);
std::vector<float> result1 = fun(x);
std::vector<float> & result2 = fun(x);

现在变量 result2 确实是 x 的引用,但是 result1 似乎是 x 的拷贝而不是引用。所以在这里我很困惑:

为什么我可以将非引用变量声明为返回引用的函数的返回值?

C++ 是否会因为我对 result1 的声明不是引用而将我返回的引用更改为非引用变量?

最佳答案

因为 fun(x) 只是接受对 x 的引用并返回它,你的代码(左边)等同于右边的代码:

a std::vector<float> x(10000);          a std::vector<float> x(10000);

std::vector<float> result1 = fun(x); std::vector<float> result1 = x;
std::vector<float> &result2 = fun(x); std::vector<float> &result2 = x;

换句话说,result1 成为x拷贝,而result2 成为引用x。这意味着 result1x 不同,而 result2x 指的是相同的底层数据。

这真的没有什么不同:

int a = 42;
int b = a;
int &c = a;

此时,b 是一个独立的拷贝,如果更改,不会影响其他两个变量。但是,由于 ac 引用相同的底层数据,因此更改其中一个会影响另一个。

关于c++ - 对 C++ 从函数返回引用的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51604437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com