long long combine(unsigned int high, unsigned int low) {
return ((unsigned long long) high) << 32 || low;
}unsigned long long到long long的隐式转换是否是reinterpret_cast,或者如果unsigned数对于signed数据类型太大会发生什么?发布于 2011-05-25 17:47:51
您应该返回unsigned long long并让用户决定他们想要对强制转换做什么,特别是如果您希望它是通用的。
我更喜欢像u32tou64、uinttoull这样的名字,或者比组合更具有描述性的名字。不过,这在很大程度上取决于您自己的命名标准。
另外,我会考虑更迂腐:
return (((uint64_t) high) << 32) | ((uint64_t) low);这不太可能产生影响,因为代码与您的代码本质上是相同的,但是它更容易阅读,并且避免了非常罕见(但调试非常麻烦)的转换问题。如果编译器不支持这种类型表示法,则可能需要自定义类型头。
同时,考虑让它成为一个宏。将其作为一个函数并没有什么好处--操作本身将比函数调用设置、调用和返回花费更少的时间,因此宏的性能将更高。此外,它不会占用比函数调用更多的程序空间,因此留给它一个真正的函数几乎没有什么好处。
https://codereview.stackexchange.com/questions/2607
复制相似问题