为什么sizeof计算两个long long相加结果返回8字节而非16字节?
问题原因解答
你得到8而不是16的核心原因是对sizeof运算符的功能和C++算术运算的类型规则存在误解:
sizeof计算的是操作数对应类型的内存占用字节数,除可变长度数组(VLA,C++标准不支持,属于部分编译器扩展)场景外,所有sizeof的求值都在编译期完成,和操作数的运行时数值无关。- 两个
long long类型的操作数执行加法运算时,根据C++标准的常用算术转换规则,两个相同类型的有符号整数执行算术运算,返回值类型与操作数类型完全一致,仍然是long long。因此whatever[0] + whatever[2]的类型就是long long,sizeof该表达式等价于sizeof(long long),自然输出8。
额外提示:你提供的测试代码存在未定义行为。你声明的
whatever是长度为1的long long数组,仅whatever[0]是合法可访问的元素,对whatever[2]的读写属于数组越界访问,运行时可能出现随机数值、程序崩溃等不可预期的结果。不过该问题不影响sizeof的计算结果,因为sizeof编译阶段就已经完成求值,不会执行实际的运行期数组访问操作。
内容的提问来源于stack exchange,提问作者Shah Jacob
相关产品推荐
相关产品推荐

