c++ - 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++20,consteval可能是你的朋友:
consteval int foo(int x) {
return x + 2;
}
int main() {
constexpr int r = foo(2);
}
推荐阅读
- python - 无法在 C# 中导入 python 类
- php - PHP 警告:PHP 启动:无法加载动态库 'c:\\php\\ext\\php_ldap.dll'
- reactjs - 记忆 JSX 元素以便稍后在道具中将它们传递给拥有的组件是否安全?
- visual-c++ - 如何使用 Application Verifier 在我的 DLL 中查找堆损坏?
- php - 通过导入创建时,SKU 无法搜索 WooCommerce 产品
- matlab - 将 RGB 图像与点云匹配
- react-native - 我可以在平面列表中使用 ItemSeparatorComponent 中的组件吗?
- php - 如何获取通过特定策略的所有用户的列表?
- php - Laravel 在同一个控制器中的多个显示功能
- reactjs - 我在使用 Fetch() 提交表单时尝试调用 API,但遇到错误