我写了一个简单的递归函数,并添加了一个constexpr标志来指示编译器可以在编译时计算它。 当我用两个不同的参数调用这个函数时,我得到不同的运行时结果。那是为什么?
代码:
constexpr int plusOne(int i)
{
return (i > 0) ? i + plusOne(i - 1) : 0;
}
#include <chrono>
int main() {
auto start = std::chrono::high_resolution_clock::now();
auto finish = std::chrono::high_resolution_clock::now();
start = std::chrono::high_resolution_clock::now();
plusOne(200);
finish = std::chrono::high_resolution_clock::now();
std::cout << std::chrono::duration_cast<std::chrono::nanoseconds>(finish - start).count() << "ns\n";
start = std::chrono::high_resolution_clock::now();
plusOne(100);
finish = std::chrono::high_resolution_clock::now();
std::cout << std::chrono::duration_cast<std::chrono::nanoseconds>(finish - start).count() << "ns\n";
}
输出:
32472ns
3021ns
答案 0 :(得分:1)
由于未使用plusOne
次调用的结果,因此完全放弃这些调用,并且您的示例程序主要测量对high_resolution_clock::now
的第一次和后续调用之间的差异。你可以swap arguments and get similar results