由于Stockfish是评价最高的国际象棋引擎,而且众所周知它的 CPU 效率很高,我决定打开它的源代码并尝试了解并了解它是如何工作的。
我遇到了这段代码,只是将位板移动到某个方向(北,南,东......)
取自 STOCKFISH 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
// ...........
}
不行?第一种方法是否更有效?