C/C++文字

use*_*541 15 c c++

有人可以帮我识别标准(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位)

Jen*_*edt 6

规则是首先评估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.