我遇到了这个 C++ 模板
template <typename T> int sgn(T val) {
return (T(0) < val) - (val < T(0));
}
而且我不得不承认我并没有真正理解它。 如果我尝试做一个数字应用程序,比方说 -1: (0<(-1))-(-1 < 0) => False - True 我得到了 Bool 的减法。 它应该如何工作?有人可以解释编译器将执行的不同步骤吗?
最佳答案
它会返回 -1 如果是负数 +1 如果是正数 0 如果是 0 让我们说-1:
(T(0) < val) - (val < T(0))
0<-1 false or 0
-
-1 < 0 true or 1
0 - 1 = -1
让我们说0
(T(0) < val) - (val < T(0))
0<0 false or 0
-
0 < 0 false or 0
0 - 0 = 0
假设 1:
(T(0) < val) - (val < T(0))
0<1 true or 1
-
1 < 0 false or 0
1 - 0 = 1
关于c++ - 模板符号说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49626486/