检测 constexpr 函数的执行时间

detecting execution time of a constexpr function

本文关键字:执行时间 函数 constexpr 检测      更新时间:2023-10-16

假设我有这段代码:

#include <iostream>
constexpr int myDumbFunction(int a, bool b);
int main(int argc, char **argv) {
    constexpr auto foo = 0;
    const auto bar         = 0;
    //! compile-time execution:
    std::cout << myDumbFunction(foo, true);
    //! runtime execution:
    std::cout << myDumbFunction(bar, true);
    return 0;
}
constexpr int myDumbFunction(int a, bool b) {
    if(a > 100 and b) {
        return a - 100;
    }
    else if(a < 100 and b) {
        return a + 100;
    }
    return 122;
}

有没有办法检测第一个myDumbFunction()函数调用是否会在编译时被调用?

在这个特定的例子中,这很明显,但假设我不知道我正在传递的对象的所有细节。

另一个constexpr相关的问题:是否有某种断言不会改变编译时执行?

std::cout << std::integral_constant<int, myDumbFunction(foo, true)>::value;

仅当在编译时计算myDumbFunction时才有效。