必须在任务中投入价值

Rob*_*ert 3 c c++ casting

我有一些c ++代码要求我在赋值语句中立即转换.该演员使代码更难以阅读,我希望有一种解决方法.

uint64_t shifted_val = (uint64_t)1 << 50;
Run Code Online (Sandbox Code Playgroud)

如果我在没有强制转换的情况下编写此代码,shifted_val则将其设置为0,我假设因为它将1立即数视为32位值.有什么我想念的东西,所以我可以写没有铸造吗?

Pho*_*reo 6

你可以做:

uint64_t shifted_val = 1ull << 50;
Run Code Online (Sandbox Code Playgroud)

如果您认为语法也接近于强制转换,那么您可以执行以下操作:

uint64_t a = 1;
uint64_t shifted_val = a << 50;
Run Code Online (Sandbox Code Playgroud)


AnT*_*AnT 5

一种方法是采用在接收者变量本身内执行计算的习惯

uint64_t shifted_val = 1;
shifted_val <<= 50;
Run Code Online (Sandbox Code Playgroud)

这将自然地解决问题,而不需要您将其他类型引用硬编码到表达式中(如类型转换或类型特定的后缀).