在C语言中printf("%d",sizeof('A'));得到的结果是4;
而在C++的编译器上运行的结果却是1;
是编译器进行了怎样的改变,
还是语言标准有了变化。
printf时类型提升
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
3条回答 默认 最新
关注引自免费微信小程序:皆我百晓生
在C语言和C++中,字符常量(例如 'A')被存储为整数类型,具体来说通常是
unsigned char类型。然而,在不同的上下文中,字符常量可能会经历类型提升(type promotion)。类型提升的规则因语言版本和编译器实现而异。让我们分别看看C语言和C++中的情况。C语言
在C语言中,
sizeof操作符用于计算其操作数的字节数。对于内置类型,它返回的是字节大小。当sizeof应用于字符常量时,由于字符常量会被提升到一个更大的整数类型(通常是最小的整数类型,即int),所以输出结果会是int类型的字节数,这通常是4个字节,因此在大多数情况下你会看到输出为4。示例代码:
#include <stdio.h> int main() { printf("%zu", sizeof('A')); return 0; }在这个例子中,我将
%d替换为%zu,因为sizeof返回的是size_t类型,这是一个无符号整数类型,使用%zu可以正确地打印出它的值。C++
在C++中,
sizeof的行为与C语言类似,但对字符常量的处理略有不同。C++标准规定,sizeof应该返回字符类型的字节数,而不是字符常量提升后的整数类型的字节数。因此,如果你在C++中使用sizeof('A'),结果应该是1,因为它是在计算字符类型的字节数,而非提升后的整数类型。示例代码:
#include <iostream> int main() { std::cout << sizeof('A'); return 0; }在这个C++的例子中,我们使用了
<iostream>和std::cout来替代printf输出。总结一下,C语言和C++之间的主要区别在于它们如何解释
sizeof对于字符常量的操作。C语言会将字符常量提升到int类型并返回int类型的字节数,而C++则会直接返回字符类型的字节数。这是因为两种语言的设计决策和标准的不同。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录