gpt4 book ai didi

c++ - 使用对(成员)函数返回的对象的引用是否安全甚至可能?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:06:43 30 4
gpt4 key购买 nike

我有一个类存储了一堆可以在整个程序中更改的值和一个成员函数,它根据这些值计算并返回一个矩阵。

我还有一个函数需要一个指向此类矩阵的第一个 float 的 const 指针。

我不想在某处手动创建本地矩阵。相反,我想同时更新并将其直接从类传递给所述函数。

所以,而不是这个:

glm::mat4 matrix = myClass.calculateMatrix();

functionThatneedsMatrix(&matrix [0][0]);

我可以这样做吗?

functionThatneedsMatrix(&myClass.calculateMatrix()[0][0]);

如果是,该矩阵的范围是什么?

最佳答案

临时值一直存在到创建它的完整表达式的末尾,因此在您的情况下,从 calculateMatrix 返回的纯右值一直存在到 ;(在 之后functionThatneedsMatrix 返回)。所以是的,以这种方式使用它是安全的。

functionThatneedsMatrix(&myClass.calculateMatrix()[0][0]) ;
// ^
// |
// temporary lifetime ends here,
// after functionThatneedsMatrix returns

一个可能的 UB 情况是如果 functionThatneedsMatrix 以函数调用结束后可访问的方式返回或存储该指针:

int* p = functionThatneedsMatrix(&myClass.calculateMatrix()[0][0]) ;
// ^
// if it returns the pointer value it received as parameter

// p is a dangling pointer at this time

int a = *p; // Undefined behavior

关于c++ - 使用对(成员)函数返回的对象的引用是否安全甚至可能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54611544/

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