首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Stockfish 12源代码:替换函数参数的模板

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

Stack Overflow用户
提问于 2020-10-04 11:02:53
回答 1查看 149关注 0票数 1

因为河豚是级别最高的国际象棋引擎,而且它的CPU效率很高,所以我决定打开它的源代码,试着理解和看看它是如何工作的。

我看到了这个代码片段,简单地将一个位板移到一个特定的方向(北、南、东.)

摘自河豚12来源: 下载

代码语言:javascript
复制
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

调用函数

代码语言:javascript
复制
shift< direction >(bitboard);

在这种情况下有什么必要有一个模板,为什么会有类似的东西

代码语言:javascript
复制
constexpr Bitboard shift(Bitboard b,Direction D) {
  return  D == NORTH      ?  b             << 8 : D == SOUTH      ?  b             >> 8
  // ...........
}

不工作?第一种方法在任何方面都更有效吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-04 11:58:44

在这种情况下有什么必要有一个模板,为什么会有类似的东西 //省略代码 不工作?

具有给定参数的版本也将工作。

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

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

在运行时进行计算总是需要一个函数调用(尽管它可以是内联的),并且需要从堆栈中计算参数(这可能需要一些注册操作,即使是内联的)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64193811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档