c的类型提升的一点小测试
之前似乎是在哪儿有听说过,今天听人正式的说了一下,自己测试了测试,果然如此。
代码如下
编译之后,运行结果是4,char明显变成了一个int
使用DDD跟踪,发现编译器在生成阶段就已经算好sizeof 'A'的值是4,硬编码进去了……
相反,如果之前定义char x = 'a'; 最后输出sizeof x,那这时又变成了1。
发生提升的时候一般都是在表达式中,低于int的整形提升到int,低于double的浮点提升到double。 这个东西完全取决于编译器,上面第二个例子也是编译器提前算好的,只不过由于明确定义了这个东西的类型,所以编译器算出来的是1。 实际上char+char的时候是先int+int然后裁剪成一个char,看看编译出来的代码即知。