switch
- case
语句中的变量声明问题在this SO post中有详细讨论,答案涵盖了大多数方面。但是我遇到了一个问题,因为我找不到一个坚实的理由。有人能解释这个代码有什么问题吗?switch-case语句中的变量声明
switch (var)
{
case 0:
int test;
test = 0; // no error
int test2 = 0; // ERROR: initialization of 'test2' is skipped by 'case' label
std::string str;
str = "test"; // ERROR: initialization of 'str' is skipped by 'case' label
break;
case 1:;
break;
}
我知道为什么第6行会导致错误。但接下来的两行有什么问题?我认为这可能与本地类型和类类型之间的差异有关,但我不确定。
这不是Why can't variables be declared in a switch statement?重复的问题!正如我提供了一个链接到原来的。请阅读两个问题,并注意其中的差异。 AFAIK,问题不在原始问题中讨论。
因此我可以断定,如果没有代码在类的构造函数,我的代码不会给任何错误? –
@polfosol准确地说,默认的构造函数和析构函数必须是“小巫见大巫”,作为标准说。见http://en.cppreference.com/w/cpp/language/destructor#Trivial_destructor和http://en.cppreference.com/w/cpp/language/default_constructor#Trivial_default_constructor – Brian