gpt4 book ai didi

c++ - 跳转绕过 switch 语句中的变量初始化

转载 作者:行者123 更新时间:2023-12-01 14:22:52 26 4
gpt4 key购买 nike

我需要一个 std:: vector<char>std:: string在我的开关盒中出于某种目的。因此,我编写了以下虚拟代码来查看它是否有效:

#include <iostream>
#include <string>
int main() {
int choice = 0;

do {
std:: cout << "Enter Choice" << std::endl;
std:: cin >> choice;

switch(choice) {
case 1:
std::cout << "Hi";
break;

case 2:
std::string str;
std::cin >> str;
break;

case 3: //Compilation error, Cannot jump from switch statement to this case label
std::cout << "World" << std:: endl;
break;

default:
std:: cout << "Whatever" << std:: endl;
}

} while(choice != 5);
return 0;
}

好吧,我有点明白 strstd:: string 的对象类型。所以,我试图跳过这个变量初始化。

那么为什么定义C风格的字符串不会导致编译错误:
#include <iostream>
#include <string>
int main() {
int choice = 0;

do {
std:: cout << "Enter Choice" << std::endl;
std:: cin >> choice;

switch(choice) {
case 1:
std::cout << "Hi";
break;

case 2:
char str[6];
std::cin >> str;
break;

case 3:
std::cout << "World" << std:: endl;
break;

default:
std:: cout << "Whatever" << std:: endl;
}

} while(choice != 5);
return 0;
}

如何使第一个代码起作用?

最佳答案

char str[6];是默认初始化的。对于具有自动存储持续时间(“在堆栈上分配”)的简单值的 C 数组,它意味着“根本没有初始化”,所以我想这不是错误。

但是,如果您像 char str[6] = {} 一样初始化数组,它会产生错误。

我建议你多加花括号 str在它自己的范围内并且在进一步的 case 中不可见声明:

#include <iostream>
#include <string>
int main() {
int choice = 0;

do {
std:: cout << "Enter Choice" << std::endl;
std:: cin >> choice;

switch(choice) {
case 1:
std::cout << "Hi";
break;

case 2: { // Changed here
std::string str;
std::cin >> str;
break;
}
case 3: // `str` is not available here, no compilation error
std::cout << "World" << std:: endl;
break;

default:
std:: cout << "Whatever" << std:: endl;
}

} while(choice != 5);
return 0;
}

在哪里放置括号是样式偏好。

关于c++ - 跳转绕过 switch 语句中的变量初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61708267/

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