微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Stockfish 12源代码:替换函数参数的模板

如何解决Stockfish 12源代码:替换函数参数的模板

由于Stockfish是国际象棋引擎中评分最高的引擎,并且众所周知,它具有相当高的cpu效率,因此我决定打开其源代码并尝试了解其运行方式。

我遇到了这段代码,只是将位板移到某个方向(北,南,东...)

从鱼类12源中提取Download

template<Direction D>
constexpr bitboard shift(bitboard b) {
  return  D == norTH      ?  b             << 8 : D == SOUTH      ?  b             >> 8
  // ...........
}
// bitboard is a type deFinition for uint64_t

调用函数

shift< direction >(bitboard);

在这种情况下需要一个模板是什么,为什么会这样

constexpr bitboard shift(bitboard b,Direction D) {
  return  D == norTH      ?  b             << 8 : D == SOUTH      ?  b             >> 8
  // ...........
}

不起作用?第一种方式是否更有效率?

解决方法

在这种情况下需要一个模板是什么,为什么会这样

// omitted code

不起作用?

具有给定参数的版本也可以使用。

第一种方法在任何方面都更有效率吗?

是的,使用模板将更加有效,因为D总是在编译时进行评估,因为它是constexpr

在运行时评估总是需要一个函数调用(尽管可以内联),并从堆栈中评估参数(即使是内联,也可能要花费一些寄存器操作)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。