C++ 模板符号说明
我遇到了这个C的模板++C++ 模板符号说明,c++,templates,C++,Templates,我遇到了这个C的模板++ template <typename T> int sgn(T val) { return (T(0) < val) - (val < T(0)); } template int sgn(T val){ 返回值(T(0)0 您需要检查这两个条件,以查看值是否可以等于零-这就是signum的定义。如果您只想检查大于或小于0的值,则只需进行一次比较即可 尽管如此,如果您使用-1示例和发布的模板,您将得到: 返回False-T
template <typename T> int sgn(T val) {
return (T(0) < val) - (val < T(0));
}
template int sgn(T val){
返回值(T(0)
我得承认我真的不明白。
如果我尝试做一个数值应用程序,比如-1:
(0假-真我得到布尔的减法。
这就是它的工作原理吗?有人能解释一下编译器将执行的不同步骤吗?false和true将被转换为0和1。因此,根据一个或两个表达式的计算结果是否为false,您将得到-1,0,1结果。这是signum函数的canon定义 这不是一个有效的模板,为了更好的工作,应该有三个专业 这个问题的答案解释了以下几点:
那里发生了隐式转换:
True=>1
和False=>0
您需要检查这两个条件,以查看值是否可以等于零-这就是signum的定义。如果您只想检查大于或小于0的值,则只需进行一次比较即可
尽管如此,如果您使用-1
示例和发布的模板,您将得到:
返回False-True;
=>返回0-1;
=>返回-1;
如果为负,则返回-1;如果为正,则返回0如果为0
让我们说-1:
(T(0) < val) - (val < T(0))
0<-1 false or 0
-
-1 < 0 true or 1
0 - 1 = -1
(T(0) 0在那里得到一个隐式转换。False=>0,True=>1。因此得到返回0-1
(T(0) < val) - (val < T(0))
0<0 false or 0
-
0 < 0 false or 0
0 - 0 = 0
(T(0) < val) - (val < T(0))
0<1 true or 1
-
1 < 0 false or 0
1 - 0 = 1