如何返回glm :: vec3作为值?

时间:2019-05-29 12:55:34

标签: c++ glm-math return-value-optimization

我正在尝试在辅助函数中将浮点数组转换为glm向量。不幸的是,返回值被破坏了:

extension UIColor {
    @objc class var myGolden: UIColor {
        return UIColor(red: 1.000, green: 0.894, blue: 0.541, alpha: 0.9)
    }
}
print(UIColor.myGolden)

class MyUIColor: UIColor {
    override class var myGolden: UIColor {
        return UIColor(red: 1.000, green: 0.894, blue: 0.541, alpha: 0.75)
    }
}
print(MyUIColor.myGolden)

我希望以下代码在函数中的堆栈上分配arr: 1, 1, 0 fn.arr: 1, 1, 0 fn.vec: 1, 1, 0 vec: 4.7468e-11, 4.55856e-41, 1 ,然后将其作为值返回。

vec

从上面的输出来看,情况似乎并非如此。由于最后的输出显示随机垃圾,因此必须在分配值。也许由于某些原因未复制// main.cpp float colour[3] = {1.0f, 1.0f, 0.0f}; std::cout << "arr: " << colour[0] << ", " << colour[1] << ", " << colour[2] << std::endl; glm::vec3 c = arr_to_vec3(colour); std::cout << "vec: " << c.x << ", " << c.y << ", " << c.z << std::endl; // util.cpp glm::vec3 arr_to_vec3(float arr[3]) { std::cout << "fn.arr: " << arr[0] << ", " << arr[1] << ", " << arr[2] << std::endl; glm::vec3 vec = glm::vec3(arr[0], arr[1], arr[2]); std::cout << "fn.vec: " << vec.x << ", " << vec.y << ", " << vec.z << std::endl; return vec; } ,并且返回的矢量指向float的堆栈帧?对我来说,data如何存储在向量中以及应用什么语义上还不是很清楚。

奇怪的是,如果我仅将这两个代码块复制到一个空项目中(可能不是偶然清除那里的内存),我将无法复制。

0 个答案:

没有答案