繁体   English   中英

C ++:被忽略的返回值破坏行为是明确定义的

[英]C++: Is the ignored return value destruction behavior well-defined

问题:被忽略的返回值是立即破坏还是在超出范围时被破坏。

下面的代码返回我的编译器

输出:

是谁,不需要它。

谁买它,没用它。

谁使用它既不能看到也不能感受到它。

它是什么?

因此,忽略的值立即被破坏。 但这个编译器是特定的还是标准行为?

struct foo
{
   ~foo()
   {
      std::cout << "Who makes it, has no need of it. \n"
                << "Who buys it, has no use for it. \n";
   }
}

foo createFoo()
{
   return foo();
}

int main(int argc, char* argv[])
{
     createFoo();
     std::cout << "Who uses it can neither see nor feel it.\n"
               << "What is it?"; 
}

返回的临时值在完整表达式完成后立即销毁, 除非它的生命周期通过绑定到右值或右值引用来扩展。

在标准5.11中有

在某些情况下,表达式仅出现其副作用。 这种表达式称为丢弃值表达式。 计算表达式并丢弃其值。

因此,当表达式结束时,该值将被丢弃,如果它是类类型,则调用析构函数。

§12.2/ 3

临时对象作为评估全表达式 (1.9) 的最后一步被销毁,该表达式 (词法上)包含创建它们的点。 即使该评估以抛出异常结束,也是如此。 销毁临时对象的值计算和副作用仅与完整表达相关联,而不与任何特定子表达相关联。

例外是构造函数参数,以及绑定对临时的引用。 (§12.3/ 4F)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM