我有一些c ++代码要求我在赋值语句中立即转换.该演员使代码更难以阅读,我希望有一种解决方法.
uint64_t shifted_val = (uint64_t)1 << 50;
Run Code Online (Sandbox Code Playgroud)
如果我在没有强制转换的情况下编写此代码,shifted_val则将其设置为0,我假设因为它将1立即数视为32位值.有什么我想念的东西,所以我可以写没有铸造吗?
你可以做:
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)
一种方法是采用在接收者变量本身内执行计算的习惯
uint64_t shifted_val = 1;
shifted_val <<= 50;
Run Code Online (Sandbox Code Playgroud)
这将自然地解决问题,而不需要您将其他类型引用硬编码到表达式中(如类型转换或类型特定的后缀).