goto 和析构函数兼容吗?
此代码会导致未定义的行为:
void some_func() {
goto undefined;
{
T x = T();
undefined:
}
}
不调用构造函数。
但是这段代码呢? x 的析构函数会被调用吗? 我想会的,但我想确定一下。 :)
void some_func() {
{
T x = T();
goto out;
}
out:
}
This code leads to undefined behavior:
void some_func() {
goto undefined;
{
T x = T();
undefined:
}
}
The constructor is not called.
But what about this code? Will the destructor of x be called? I think it will be, but I want to be sure. :)
void some_func() {
{
T x = T();
goto out;
}
out:
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
是的,析构函数将按预期被调用,就像您由于异常而提前退出作用域一样。
标准 6.6/2(跳转语句):
Yes, destructors will be called as expected, the same as if you exited the scope early due to an exception.
Standard 6.6/2 (Jump statements):