gpt4 book ai didi

c++ - 从 C++ 方法返回引用与拷贝

转载 作者:行者123 更新时间:2023-11-30 01:43:11 24 4
gpt4 key购买 nike

我目前正在学习 C++,对从方法返回引用的概念有点困惑。考虑以下玩具示例:

#include <iostream>
#include <vector>

class IntHolder {

private:

std::vector<int> d_values;

public:

IntHolder() {
d_values.push_back(1);
d_values.push_back(2);
d_values.push_back(3);
}

std::vector<int> &values() {
return d_values;
}

};

int main(int argc, char **argv) {
IntHolder h;
std::vector<int> ret_val = h.values();
std::cout << ret_val.size() << std::endl;

ret_val.push_back(4);
ret_val.push_back(5);

std::cout << h.values().size() << std::endl;

return 0;
}

这会将以下内容打印到标准输出:

3
3

由于我们返回对 d_values 的引用,返回的对象不应该与存储在 IntHolder 实例中的对象相同,因此在调用 >h.values() 再次,我们应该看到 5 的大小?

既然不是这样,那么返回对象的引用或对象的拷贝有什么区别?从方法返回时有区别吗?

最佳答案

您正在返回来自 values 的引用函数,但您没有分配返回对象给引用变量。相反,您正在制作它的拷贝,因为您正在将它分配给一个新的 std::vector<int>。名为 ret_val .

你想像这样修改你的代码,以捕获返回的引用:

std::vector<int>& ret_val = h.values();

或者简单地说:

auto& ret_val = h.values();

关于c++ - 从 C++ 方法返回引用与拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38172818/

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