C / C++ Literals

C / C++ Literals

本文关键字:Literals C++      更新时间:2023-10-16

谁能帮我在标准(C99和c++ 03)中确定下面的行发生了什么?

uint16_t a = 5;

那么,左边是类型变量,右边是文字,文字值何时以及如何获得变量的类型?

上面的赋值是否等同于下面的语句?

uint16_t a = (uint16_t)5;  /* C */
uint16_t a = reinterpret_cast<uint16_t>(5);  // C++

如何:

uint16_t a = 5u;

如果你有这样的内容:

uint32_t b = a + 5;

上面的语句是否等于下面的语句?

uint32_t b = (uint32_t)(a + (uint16_t)(5));  /* C */
uint32_t b = reinterpret_cast<uint32_t>(a + reinterpret_cast<uint16_t>(5));  // C++

在C11和c++ 14中有变化吗?另外,请假设系统int为32位。

我用C写代码有一段时间了,但从来没有真正深入地理解过它,但它总是困扰着我,所以如果有人能帮我整理一下,我会很感激。

谢谢…

(编辑:增加了int为32位的假设)

规则是首先计算RHS,然后为目标类型转换值。特别是

uint32_t b = a + 5;

等价于

uint32_t b = (uint32_t)((int)a + 5);

如果uint16_t是窄型,则小于int

C中的所有操作(我认为也在c++中)至少是int的整数秩。