c++ - 模板符号说明

标签 c++ templates

我遇到了这个 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/

相关文章:

c++ - 如何从 C++ DLL 导出函数并在 Delphi 中使用?

c++ - C++ 类中公共(public)函数的地址

c++ - 如何根据模板中的类型编译函数?

c++ - 可变参数模板必须具有非空参数包的可调用特化才能格式正确吗?

javascript - 带有 moustache.js 的内容相关模板/部分

c++ - Emscripten编译qt应用不显示图像

c++ - 积分转换的运行时检查

c++ - 一种动态分配多维数组的方法

c++ - 用泛型类型替换模板化函数指针

c++ - 用我自己的实现覆盖库中的模板化方法