以下代码是否安全(它在调试中工作):
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
所以 - 它安全吗?我应该忘记它并使用带有显式 tmp 的代码吗?
但无论如何-如果允许优化器在从此调用返回之前杀死临时对象,我仍然感兴趣:
takePointer(&getValue())
编辑:谢谢大家!不幸的是,我无法更改函数“takesPointer”(它是库的一部分),我只能将其包装在调用 takePointer 的函数“takesReference”中 - 这会消除副本,还是允许编译器创建一个副本(“类型”是一个 int-3x3-Matrix,所以它不会那么糟糕,但仍然......)?
inline void takesReference(const Type& v){ takesPointer(&v); }
关于销毁时间:它会在“takesPointer”返回之后被销毁,还是在它被调用之后被销毁?