gpt4 book ai didi

c++ - 为什么不能在 switch 语句中声明变量?

转载 作者:可可西里 更新时间:2023-11-01 17:00:35 29 4
gpt4 key购买 nike

我想了解更多关于“Why can’t variables be declared in a switch statement?”的信息

我读了这篇文章,但我没有完全理解。您可以只在 switch 内声明变量,但要对变量进行 decalre 和初始化,或者声明类的对象,它会产生编译时间错误。

请解释一下....

最佳答案

本质上是因为如果未命中包含变量初始化的标签,则会跳过变量的初始化。这会很糟糕,因为当且仅当初始化代码已运行时,编译器将不得不发出会破坏所述变量的代码。

例如:

class A
{
// has some non-trivial constructor and destructor
};

switch (x)
{
case 1:
A a;
break;
default:
// do something else
}

如果代码命中了默认值,那么a 就不会被初始化。编译器必须能够提前解决这个问题。可能出于性能原因,这是不允许的。

简单的解决方法是引入一个新的作用域层:

class A
{
// has some non-trivial constructor and destructor
};

switch (x)
{
case 1:
{
A a;
}
break;
default:
// do something else
}

这样就可以了,a 的销毁现在已经明确定义了。

关于c++ - 为什么不能在 switch 语句中声明变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/449736/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com