0
所以从我所知道的以下两个函数的行为应该完全一样。 但是,如果我使用第一个实现,编译器似乎无法实现它相当于第二个。无论如何提示编译器使用第二个?如何让C++编译器使用无符号签名技巧进行比较优化
换句话说,我讨厌做static_cast的东西...无论如何避免它?
// In my real use case, range will never be negative....
// All I want is to return (diff > range || diff < 0) assuming range >=0
bool IsOutofRange1(int diff, int range) {
if ((range >= 0) && (diff > range || diff < 0)) return true;
if (range < 0 && diff > range && diff < 0) return true;
return false;
}
bool IsOutofRange2(int diff, int range) {
if (static_cast<unsigned>(diff) > static_cast<unsigned>(range)) return true;
return false;
}
你为什么讨厌'static_cast'? – GWW
@GWW那你应该讨厌所有的演员。 – emlai
http://stackoverflow.com/questions/31347420/can-we-and-how-safe-is-to-signed-to-unsigned-trick-to-save-one-comparison-in – Steephen