【发布时间】:2021-01-19 10:40:44
【问题描述】:
由于Stockfish 是评价最高的国际象棋引擎,而且众所周知它的 CPU 效率非常高,我决定打开它的源代码并尝试了解它的工作原理。
我遇到了这个 sn-p 代码,只是将位板移动到某个方向(北、南、东...)
取自 STOCKFISH 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
// ...........
}
不工作?第一种方式是否更有效?
【问题讨论】:
-
“第一种方式效率更高吗?”是的。
-
@n.'pronouns'm。你能在答案中加上“为什么”吗
-
@AryanParekh
D在模板情况下在编译时进行评估,这就是它更高效的原因(通过性能)。 -
@πάνταῥεῖ 这是否意味着与第二种方法相比,使用它总是更好?如果您能将信息放入答案中,我将不胜感激!