gpt4 book ai didi

c++ - 返回 vector 对象的引用,好主意吗?

转载 作者:行者123 更新时间:2023-11-30 05:47:15 25 4
gpt4 key购买 nike

我需要一个 3d vector 来存储一些图 block 对象,而不是将一个 vector 放在一个 vector 中 我试过这个:

inside a struct
...
vector<sortTile3> data;
uint32_t width, length, height;

sortTile3& At(uint32_t x, uint32_t y, uint32_t z) {
return data[x * width + y * length + z];
}
...

似乎工作正常,也应该更快,我认为,因为它不是 3 次内存获取,而是 1 次内存获取和 4 次计算或 2 次计算,如果我能弄清楚如何进行融合乘加。

无论如何,我记得在这个网站上读过一些关于返回引用不好的东西。我明白为什么……很多事情都可能出错,但这个不应该是这样……或者?

最佳答案

这很好,很平常。返回引用的问题涉及(主要)函数局部对象。即:

struct foo {
int data;

// this is fine
int &ref1() {
return data;
}

// this is NOT fine
int &ref2() {
int localdata;
return localdata;
}
}

后者不好的原因是 localdatafoo::ref2 离开时超出范围,然后返回的引用将不会引用有效的对象。

通常,您必须注意不要将对对象的引用保存的时间超过其生命周期,但是从成员函数返回对数据成员的引用本身并没有错。

例如,您可能已经注意到 std::vectoroperator[] 返回对其成员的引用;你也可以做同样的事情。但是,您必须小心,不要将它们存储的时间超过它们的有效期。例如:

std::vector<int> v(10);
int &r = v[0];
v.resize(20);

// r is no longer valid because v may have relocated its storage.

另请注意,有些事情只能通过返回引用来实现。例如,如果你想能够做到

yourstruct.At(0, 1, 2).foo = bar;

并保留零钱,退回拷贝对您没有用。

关于c++ - 返回 vector 对象的引用,好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28645758/

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