首页 > 解决方案 > C++ constexpr 函数总是在编译时评估?

问题描述

如果我想要一个行为与宏相同的函数,即在编译时计算值,我可以使用 constexpr 函数吗?

例如,我可以用 foo 函数替换 Foo 宏,并且在以下所有情况下仍然有编译时评估结果:

#define FOO(x) (x + 2)

constexpr int foo(int x) {
    return x + 2;
}

void doSomething(int a) { ... }

int main() {
    int res1 = foo(3);
    doSomething(foo(4));
    const int res2 = foo(5);
    return 0;
}

标签: c++constexpr

解决方案


使用 C++20,consteval可能是你的朋友:

consteval int foo(int x) {
    return x + 2;
}

int main() {
    constexpr int r = foo(2);
}

推荐阅读