是以下代码安全(它在DEBUG中工作):
void takesPointer(const Type* v);//this function does read from v, it doesn't alter v in any way
Type getValue();
...
takesPointer(&getValue());//gives warning while compiling "not an lvalue"
...
Type tmp = getValue();
takesPointer(&tmp);//this is safe, and maybe I should just do it, instead of posting here
Run Code Online (Sandbox Code Playgroud)
所以 - 这样安全吗?我应该忘记它并使用显式tmp的代码吗?
但无论如何 - 如果允许优化器在从此调用返回之前杀死临时值,我仍然感兴趣:
takePointer(&getValue())
Run Code Online (Sandbox Code Playgroud)
编辑:谢谢大家!不幸的是我无法更改函数"takePointer"(它是库的一部分),我只能将它包装在一个函数"takeReference"中,它调用takePointer - 这会消除副本,还是编译器仍然可以创建一个副本("类型"是一个int-3x3-Matrix,所以它不会那么糟糕,但仍然......)?
inline void takesReference(const Type& v){ takesPointer(&v); }
Run Code Online (Sandbox Code Playgroud)
关于破坏的时间:在"takePointer"返回之后,还是在它被调用之后它会被销毁?