以逗号分隔的表达式中的析构函数调用



请考虑以下示例程序:

#include <iostream>
using namespace std;
struct t
{
~t() {cout << "destroyedn"; }
};
int main()
{
cout << "testn";
t(), cout << "doing stuffn";
cout << "endn";
}

我在 GCC 4.9.2 中获得的输出是:

test 
doing stuff 
destroyed 
end

cpp.sh 链接:http://cpp.sh/3cvm

但是,根据 cpp 对逗号运算符的偏好:

在逗号表达式 E1、E2 中,计算表达式 E1,丢弃其

结果,并在表达式 E2 开始计算之前完成其副作用

我希望~t()cout << "doing stuff"之前被召唤

这是标准行为吗?如果是这样,标准中在哪里定义?

"它的结果被丢弃"意味着子表达式的值(这里类型t)被忽略

然而,它的生存期不受影响:与任何临时变量一样,它在全表达式的末尾(即这里的分号)被破坏。

这里的cpp偏好措辞是不幸的。

与任何临时一样,这将持续到它出现的完整表达式结束。

通过"副作用",它谈论的是临时的构建

相关内容

  • 没有找到相关文章

最新更新