我有一个类存储一堆可以在整个程序中更改的值和一个成员函数,它根据这些值计算并返回一个矩阵.
我还有一个函数需要一个const指针指向这样一个矩阵的第一个浮点数.
我不想在某处手动创建局部矩阵.相反,我想同时更新并直接从课程传递给所述功能.
所以,而不是这个:
glm::mat4 matrix = myClass.calculateMatrix();
functionThatneedsMatrix(&matrix [0][0]);
我可以这样做吗?
functionThatneedsMatrix(&myClass.calculateMatrix()[0][0]);
如果是,该矩阵的范围是什么?
最佳答案 临时生存直到创建它的完整表达式结束,所以在你的情况下,从calculateMatrix返回的prvalue一直存在,直到; (在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