c++ - 为什么 switch 语句不能应用于字符串?

标签 c++ string switch-statement

编译以下代码给出错误信息:type illegal

int main()
{
    // Compilation error - switch expression of type illegal
    switch(std::string("raj"))
    {
    case"sda":
    }
}

您不能在 switchcase 中使用字符串。为什么?是否有任何解决方案可以很好地支持类似于打开字符串的逻辑?

最佳答案

原因与类型系统有关。 C/C++ 并不真正支持字符串作为一种类型。它确实支持常量 char 数组的想法,但它并不真正完全理解字符串的概念。

为了生成 switch 语句的代码,编译器必须理解两个值相等的含义。对于像整数和枚举这样的项目,这是一个微不足道的位比较。但是编译器应该如何比较 2 个字符串值呢?区分大小写、不区分大小写、文化意识等……如果不完全了解字符串,就无法准确回答。

此外,C/C++ switch 语句通常生成为 branch tables .为字符串样式开关生成分支表并不容易。

关于c++ - 为什么 switch 语句不能应用于字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13968255/

相关文章:

c - 了解开关条件下的寄存器用法

c++ - 无法获取当前键盘布局

python - 元组由 swig 为 C++ vector 生成的 python 包装器返回

c++ - 您可以在编译时将 __func__ 转换为 wchar_t[] 吗?

Javascript二维字符串数组更新值

c++ - 处理大量的 if-else , switch

c++ - 在继承类中扩展结构

r - 你如何格式化多行 R 包消息?

c - 查找子字符串 s2 在 s1 中的位置的函数

c - 在 C switch 语句中的 case 之间跳转