有人可以帮我识别标准(C99和C++ 03)下面的行会发生什么?
uint16_t a = 5;
Run Code Online (Sandbox Code Playgroud)
因此,左边是类型变量,右边是文字,文字值何时以及如何获得变量的类型?
上述作业是否等同于以下声明?
uint16_t a = (uint16_t)5; /* C */
uint16_t a = reinterpret_cast<uint16_t>(5); // C++
Run Code Online (Sandbox Code Playgroud)
怎么样:
uint16_t a = 5u;
Run Code Online (Sandbox Code Playgroud)
如果你有类似的东西:
uint32_t b = a + 5;
Run Code Online (Sandbox Code Playgroud)
以上陈述是否等同于以下陈述?
uint32_t b = (uint32_t)(a + (uint16_t)(5)); /* C */
uint32_t b = reinterpret_cast<uint32_t>(a + reinterpret_cast<uint16_t>(5)); // C++
Run Code Online (Sandbox Code Playgroud)
C11和C++ 14的变化是什么?另外,请假设系统int是32位.
我已经在C编写了一段时间,但从来没有真正理解它,但它总是困扰我,所以如果有人可以帮助我解决它,我将不胜感激.
谢谢...
(编辑:假设int是32位)
规则是首先评估RHS,然后将值转换为目标类型.特别是
uint32_t b = a + 5;
Run Code Online (Sandbox Code Playgroud)
相当于
uint32_t b = (uint32_t)((int)a + 5);
Run Code Online (Sandbox Code Playgroud)
如果uint16_t
是窄型,比窄型int
.
C中的所有操作(我认为也是在C++中)至少是整数等级int
.
归档时间: |
|
查看次数: |
707 次 |
最近记录: |