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

2023-11-26

编译以下代码会出现错误消息:type illegal.

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

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


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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 switch 语句不能应用于字符串? 的相关文章

随机推荐

  • PHP 输出到文件以供下载,无需在服务器上创建文件

    我想将数据输出到文件供用户下载 而无需在服务器上实际创建文件 文件的数据只是一个数组 我将其转换为 CSV 格式以供用户下载 这是我的代码 fh fopen file csv w fputcsv fh arr arr is my array
  • 使用 SO_REUSEADDR - 先前打开的套接字会发生什么?

    在unix网络编程中 我总是在服务器使用的套接字上设置SO REUSEADDR选项来侦听连接 这基本上是说可以在机器上的同一端口上打开另一个套接字 当从崩溃中恢复并且套接字未正确关闭时 这非常有用 应用程序可以重新启动 它只会在同一端口上打
  • 使用条件语句更改数据点的颜色

    我有一个数据集 我用它来制作散点图 我想根据 x 值为三个不同区域内的数据点分配三种不同的颜色 x 值 具有 x 值的数据点 3 1549 我想显示为黑色 x 值 gt 1549 的数据点我想显示为紫色 这是我的散点图代码并完成前两个参数
  • ASP.NET:访问 global.asax 中的会话变量

    我有一个 ASP NET 应用程序 在 Global asax 应用程序错误事件中 我调用一个方法来跟踪 记录错误 我想在这里使用会话变量内容 我使用了下面的代码 void Application Error object sender E
  • Linux 脚本 - 日期操作

    我将设置一个日期变量 例如 08 JUN 2011 我想根据该日期进行一些计算 即 1 必须获取给定日期所在月份的第一天 2 给定日期所在月份的上一个日期 3 给定日期月份的最后一天 我所知道的是使用当前系统日期和时间进行操作 但不知道如何
  • NodeJs Axios 响应错误编码

    我正在尝试使用 Axios 调用 REST 调用并得到奇怪的响应 try const response await axios get https api predic8 de shop products console log respo
  • CAS 服务票证验证失败

    我已点击链接http lukesampson com post 315838839 cas on windows localhost setup in 5 mins 则cas服务器工作正常 登录url为http 10 1 1 26 8080
  • 使用 jmx 和 java 5 以编程方式获取堆信息

    我知道使用 jconsole 附加到 java 进程来获取内存信息 具体来说 我正在以编程方式获取有关各种内存池的信息 以便我可以将其绑定到监视应用程序 Thanks 谢谢 mattk 我基本上就是这样做的 List memBeans Ma
  • Git 凭证助手导致“未找到存储库”错误?

    刚刚遇到了这个 Git 行为 它看起来像是凭证存储的错误 git pull Username for https github com Password for https email protected Already up to dat
  • 引导列重叠

    我对引导程序的网格布局有疑问 当我将屏幕大小调整为较小的布局时 我的列彼此重叠 我不确定问题是什么 这是正在发生的事情的图片 这是我的代码 div class container fluid div class row div class
  • 如何让用户使用 OpenCV 选择视频录制设备(网络摄像头)?

    所以我需要的是诸如捕获设备列表之类的东西 还有一些函数可以从用户那里获取他想要在哪个设备上进行流式传输 如何在 win32 C 控制台应用程序中使用 openCV 做这样的事情 正如 Martin 所说 OpenCV 不支持它 但你可以使用
  • Flexbox 自动边距不适用于 IE 中的 justify-content: center

    我有一个表格 其中的单元格可以包含多个图标以及文本 如果存在图标 它们会出现在文本的左侧 有几种可能的对齐情况 仅存在一个图标 图标应居中 仅存在文本 文本应左对齐 图标和文本均存在 图标和文本均应左对齐 我认为我可以通过用弹性盒将所有内容
  • Wildfly 无法加载 Oracle 驱动程序模块

    我正在尝试将 Oracle DB 数据源添加到 Wildfly 10 这是我所拥有的
  • 如何将 twilio 集成到 android 的 React Native 中?

    我正在使用 React Native 来构建需要 twilio 集成的 Android 移动应用程序 我使用了 npm 存储库中的示例代码 https github com rogchap react native twilio const
  • 使用 c++11 原子编写(旋转)线程屏障

    我试图熟悉 c 11 原子 所以我尝试为线程编写一个屏障类 在有人抱怨不使用现有类之前 这更多的是为了学习 自我改进 而不是出于任何实际需要 我的课程基本上如下所示 class barrier private std atomic
  • 如何在 Bash (linux) 或 Python 上仅过滤文件中的可打印字符?

    我想制作一个包含不可打印字符的文件 只包含可打印字符 我认为这个问题与ASCII 控制动作 但我找不到解决方案来做到这一点 也无法理解的含义 16D ASCII控制动作字符 在下面的文件中 输入文件的十六进制转储 00000000 4845
  • 如何检测iOS设备是否支持模糊效果?

    看来不同的iOS设备会渲染UINavigationBars with barStyle UIBarStyleBlack and translucent YES非常不同 考虑 iPhone 4 no tint iPhone 5 no tint
  • for循环不迭代

    在 MATLAB 中如下for loop for i 1 100 Do something such as disp i end 显然并不是真正通过迭代实现的 而是i变成矩阵 1 2 3 100 并且 循环 仅在此矩阵上执行一次i 您可以通
  • 使用 primefaces 扩展 (inputNumber)

    我是新来的primefaces词 我需要使用primefaces扩展名 inputNumber 在 XHTML 文件中我添加 taglib xmlns pe http primefaces org ui extensions 添加罐子时 p
  • 为什么 switch 语句不能应用于字符串?

    编译以下代码会出现错误消息 type illegal int main Compilation error switch expression of type illegal switch std string raj case sda 您