C++常量临时生命周期

7

请问以下代码是否符合标准:

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
作为经验法则,通常可以预期,如果某些事情可以在编译时进行检查或强制执行,则它将被执行。未定义的行为通常发生在需要运行时检查以防止其发生的情况下。但是,正如您所说,最好确保一切。 - Mike Seymour
2个回答

12

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

我手头没有标准副本,所以我无法给出精确的引用;但这在C++0x最终草案的12.2中有说明。


6
是的,临时变量的有效期限制在创建它们的完整表达式结束之前。因此,无名称数组的临时变量在调用 function 返回之前是有效的,因此其data成员也是如此。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接