use*_*183 20 c++ language-lawyer
问题:被忽略的返回值是立即破坏还是在超出范围时被破坏.
下面的代码返回我的编译器
输出:
是谁,不需要它.
谁买它,没用它.
谁使用它既不能看到也不能感受到它.
它是什么?
因此,忽略的值立即被破坏.但这个编译器是特定的还是标准行为?
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?";
}
Run Code Online (Sandbox Code Playgroud)
在标准5.11中有
在某些情况下,表达式仅出现其副作用.这种表达式称为丢弃值表达式.计算表达式并丢弃其值.
因此,当表达式结束时,该值将被丢弃,如果它是类类型,则调用析构函数.