编译器删除引用返回的向量

时间:2018-03-15 23:49:45

标签: c++ vector c++14 pass-by-reference release

不太确定为什么会这样,但我有以下代码:

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();

其中hm是高度图对象。

我处于发布模式

我稍后使用vertices,当我这样做时,大小是正确的,但其中的所有数据都是不可读的。当我单步执行代码时,似乎编译器已优化vecsVec3Vertices()的初始化

另一方面,如果我改变它以便我不通过引用传递

vector<glm::vec3> HeightMap::Vec3Vertices() {

vector<glm::vec3> vertices = hm.Vec3Vertices();

一切都很完美。关于为什么会这样的任何想法?我知道传递值可能会导致编译器使用移动操作,我只是不能为我的生活弄清楚为什么我的传递通过引用首先是无效的。提前致谢

0 个答案:

没有答案