gpt4 book ai didi

c++ - C++ 表达式中什么时候会发生隐式强制转换?

转载 作者:行者123 更新时间:2023-11-27 23:07:58 26 4
gpt4 key购买 nike

这是一个非常简单的问题。我注意到以下内容在 MSVS2012 中编译时为 val 生成 预期的 0x3412 结果:

unsigned char test[] = { 0x12, 0x34, 0x56, 0x78 };
unsigned char* ch = test;
unsigned int val = *ch | (*(ch+1) << 8);

我实际上希望右边的取消引用的字符指针 *(ch+1) 产生 0x34char 值,然后将其左移 8 位生成 0x00。似乎在值被取消引用的时间点,它已经存储在一个大到足以包含至少两个字节的类型中。

这是在某处的 C++ 标准中指定的吗?这种隐式转换究竟是如何发生的?

最佳答案

这包含在 draft C++ standard5.8 Shift operators1 说:

[...]The operands shall be of integral or unscoped enumeration type and integral promotions are performed.[...]

积分促销4.5部分积分促销中介绍,在1段中说:

A prvalue of an integer type other than bool, char16_t, char32_t, or wchar_t whose integer conversion rank (4.13) is less than the rank of int can be converted to a prvalue of type int if int can represent all the values of the source type; otherwise, the source prvalue can be converted to a prvalue of type unsigned int.

关于c++ - C++ 表达式中什么时候会发生隐式强制转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22058648/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com