看以下面代码你就知道了:
/// <summary>
/// 求整数所对应的二进制表示中1的个数
/// </summary>
/// <typeparam name="Input"></typeparam>
/// 创建时间:2024-01-24 抄自:《动手打造深度学习框架》 21页
template<size_t Input>
constexpr size_t OnesCount1 = (Input % 2) + OnesCount1< (Input / 2) >;template<> constexpr size_t OnesCount1<0> = 0;//为学习临时写的,并没有测试,只是功能与上面相同。
int OnesCount2(const size_t Input)
{if (Input == 0) return 0;return (Input % 2) + OnesCount2(Input / 2);
}int main()
{std::cout << "元函数:" << OnesCount1<10> << "\n";std::cout << "运行期函数:" << OnesCount2(10) << "\n";return 0;
}
上面代码有两个函数,功能都是计算二进制中1的个数,
运行结果:
嗯,你会问,都是2,没瞧出什么区别,对,确定,但是你看
看下面,你就会明白,区别在那里...?
把鼠标放在元函数OnesCount1中:
这里并没有运行程序,人家在运行之前就已完成计算了。
放在OnesCount2中: