什么时候constexpr函数在编译时得到评估?
由于在运行时可能会调用声明为constexpr的函数,编译器在哪个条件下决定是在编译时还是在运行时计算它?
template<typename base_t, typename expo_t>constexpr base_t POW(base_t base, expo_t expo){ return (expo != 0 )? base * POW(base, expo -1) : 1;}int main(int argc, char** argv){ int i = 0; std::cin >> i; std::cout << POW(i, 2) << std::endl; return 0;}
在这种情况下,我在编译时是未知的,这可能是编译器将POW()视为在运行时调用的常规函数的原因。然而,这种动态虽然看起来很方便,但却具有一些不切实际的含义。例如,是否有一种情况我希望编译器在编译时计算constexpr函数,编译器决定将其视为普通函数,而它在编译时也会工作?有任何已知的常见陷阱吗?
HUH函数
相关分类