c++ - 开关盒中的 char 和 int 有什么区别?

标签 c++

我最近开始学C++,在学习switch case的时候,我有这个疑惑。
如果我在以下代码中使用 int 或 char 有什么区别:
int Fav_Car;
switch case代码如下

switch( Fav_Car ) {
    case '1' :
        cout<< "That's cool";
        break;
    case '2' :
        cout<< "Even mine!";
        break;
    default :
        cout<< "Oh";
        break;
}

当我运行该程序时,我注意到使用 int 会返回默认大小写,而使用 char 则效果很好。为什么会这样?
而且,如果我使用 case '1' :case "1":

有什么区别

最佳答案

你的误解与 switch() 构造无关,都是关于单引号 '':如果你写 1 ,你得到一个值为1的整数,当你把它放在单引号'1'中时,你得到数字1的ASCII字符的数值(这有点不精确,见注释以下)。该 ASCII 字符的数值为 0x31,或十进制的 49。现在想象一下

switch( Fav_Car ) {
    case 1 :
        cout<< "That's cool";
        break;
    case 2 :
        cout<< "Even mine!";
        break;
    default :
        cout<< "Oh";
        break;
}

switch( Fav_Car ) {
    case 49 :
        cout<< "That's cool";
        break;
    case 50 :
        cout<< "Even mine!";
        break;
    default :
        cout<< "Oh";
        break;
}

第二个版本相当于您发布的版本,我认为它的行为与第一个版本截然不同的原因已经很清楚了。


注意:
虽然 '1' 在大多数 C++ 实现中生成 ASCII 字符值,但情况并非如此。该实现可以自由使用一些其他字符代码,因此 '1' 的值实际上是实现定义的。它几乎可以是除零以外的任何值(因为它用于字符串中的终止空字节)。然而,大多数实现确实使用 ASCII 编码,这就是为什么我在上面的文本中假定为 ASCII。

关于c++ - 开关盒中的 char 和 int 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35967310/

相关文章:

c++ - boost::smart_ptr 和 COW 容器

c++ - PIMPL:导出具有单个 STL 成员的类 (std::unique_ptr)

c++ - 根据模板 C++ 的类型具有可变类型的类成员

c++ - C 的 R API 中 R.3.4.4 和 R.3.5.1 的区别

c++ - C++ 中的多元正态密度函数

c++ - 在 C++ 中处理复合文字的跨平台方法是什么?

java - 为什么大括号后不需要分号?

c++ - 我可以在没有虚拟微型端口驱动程序的情况下创建 VPN 应用程序吗?

c# - 在 c# 和 c 函数之间传递值和指针

c++ - wxWidgets UI 应用程序在 C++ 中给出 4 个或更多 wxBoxSizer 对象的段错误