2010-07-06 51 views
7

能否请你告诉我,如果这样的代码是正确的(根据标准):C++恒临时一生

struct array { 
    int data[4]; 
    operator const int*() const { return data; } 
}; 

void function(const int*) { ... } 

function(array()); // is array data valid inside function? 

谢谢

+3

@Martin是的,我想确定它是有效的,而不是幸运的编译巧合。我确实知道物体的寿命,但我不确定这个物体是否像这种 – Anycorn 2010-07-06 20:54:53

+0

非常明智。作为一个经验法则,你通常可以期望,如果在编译时可以检查或执行某些东西,那么它就是。当需要运行时检查来阻止它时,通常会出现未定义的行为。但是,正如你所说,确定总是更好。 – 2010-07-06 21:14:37

回答

12

是的。临时对象直到创建它的完整表达式的结尾才有效;也就是说,直到函数调用返回之后。

我没有我的标准副本,所以我不能给出确切的参考;但它在C++0x final draft的12.2中。

+1

它在C++ 98中也是12.2。 – 2010-07-06 21:01:05

6

是。临时文件有效期至其创建完整表达式的结尾。因此,在function的调用返回之前,无名数组临时有效,因此它的data成员也是如此。