提问人:Ryoku 提问时间:3/16/2018 更新时间:3/16/2018 访问量:129
编译器删除引用返回的向量 [duplicate]
Compiler Removes Vector Returned By Reference [duplicate]
问:
不太确定为什么会发生这种情况,但我有以下代码:
vector<glm::vec3>& HeightMap::Vec3Vertices() {
vector<glm::vec3> vecs;
for (unsigned int i = 0; i < vertices.size(); i += 3) {
vecs.push_back(glm::vec3(vertices[i], vertices[i + 1], vertices[i + 2]));
}
return vecs;
}
现在,在我的主代码中,我有:
vector<glm::vec3>& vertices = hm.Vec3Vertices();
其中 是 Height Map 对象。hm
我处于发布模式
我稍后使用,当我这样做时,大小是正确的,但其中的所有数据都是不可读的。当我单步执行代码时,编译器似乎已经优化了 in 的初始化vertices
vecs
Vec3Vertices()
另一方面,如果我更改它,以便我不会通过引用
vector<glm::vec3> HeightMap::Vec3Vertices() {
和
vector<glm::vec3> vertices = hm.Vec3Vertices();
一切都很完美。关于为什么会这样,有什么想法吗?我知道无论如何,按值传递可能会导致编译器使用移动操作,我只是一辈子都无法弄清楚为什么我的引用传递首先是无效的。提前致谢
答: 暂无答案
评论