是下面的代码安全(它在DEBUG):问题有关的临时破坏的确切时间C++
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”(它是一个库的一部分),我只能将它包装在一个函数“takesReference”中,它调用takesPointer函数 - 是否会消除副本,还是允许编译器创建一个副本(“Type”是一个int-3x3-Matrix,所以它不会那么糟糕,但仍然...)?
inline void takesReference(const Type& v){ takesPointer(&v); }
关于销毁时间:它会在“takePointer”RETURNS后还是在它被调用之后被销毁?
'Type'对象将在包含'takesReference'的表达式完成后被销毁。 – 2015-01-29 01:43:03