C / C++ Literals
C / C++ Literals
谁能帮我在标准(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
的整数秩。