因为河豚是级别最高的国际象棋引擎,而且它的CPU效率很高,所以我决定打开它的源代码,试着理解和看看它是如何工作的。
我看到了这个代码片段,简单地将一个位板移到一个特定的方向(北、南、东.)
摘自河豚12来源: 下载
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
// ...........
}不工作?第一种方法在任何方面都更有效吗?
发布于 2020-10-04 11:58:44
在这种情况下有什么必要有一个模板,为什么会有类似的东西 //省略代码 不工作?
具有给定参数的版本也将工作。
第一种方法在任何方面都更有效吗?
是的,使用模板将更有效,因为D总是在编译时进行评估,因为它是一个constexpr。
在运行时进行计算总是需要一个函数调用(尽管它可以是内联的),并且需要从堆栈中计算参数(这可能需要一些注册操作,即使是内联的)。
https://stackoverflow.com/questions/64193811
复制相似问题