转换不起作用(gcc更新后?)

时间:2018-05-05 12:59:50

标签: c++ gcc

我无法理解为什么以下代码无效。

#include <iostream>
using namespace std;

int main() {
    int i = 5;
    char a = i;
    char b = (char)i;
    cout << a << endl;
    cout << b << endl;
    return 0;
}

当我从终端运行它时,我没有得到任何输出(g ++&#34; ./ test.cpp&#34; -std = c ++ 17 -Wall -O3 -o&#34 ; ./ test&#34;&amp;&amp;&#34; ./ test&#34;)当我在崇高文本3中运行它时,我得到(output

我最近已将我的gcc更新为8.0.1并使用ubuntu(more details),但我也遇到了安装在它旁边的gcc 5的问题。 (但由于某种原因,重新安装了gcc 5)。不知道它是否与此有关......

有人知道为什么这个荒谬的简单演员不起作用? 先谢谢你。

2 个答案:

答案 0 :(得分:1)

它的工作原理只是你的控制台无法输出你的眼睛,看看代码:

aurelia.json

结果是: enter image description here

答案 1 :(得分:1)

您要求计算机在其字符表中打印第5个字符。这是一个控制角色specifically ENQ。控制字符很少有可见输出;它们还有一些其他含义可能会或可能不再有用(有些像字符#10和#13一样非常有用)。

如果你想要打印数字5的字符,你要么必须使用'5',要么可以转换值'0'+5(ASCII格式为48+5)。

也许你不明白演员是做什么的。 强制转换不一定以您通常认为的方式转换数据。有些演员表(例如,intfloat;有些演员没有。你正在使用的演员只是将数据重新解释为不同的类型:在机器级别,它只是数值5。将其转换为char不会更改该数字的数据;它只是表示输出系统将其视为ASCII表中的第5个字符,而不是整数5.如果要将其转换为字符5,那么你通常需要做一些工作(比如我上面所说的)。