gpt4 book ai didi

c++ - 同一函数的两个版本(用于内联或 constexpr)

转载 作者:搜寻专家 更新时间:2023-10-31 01:35:37 26 4
gpt4 key购买 nike

对于 constexpr 函数,唯一的选择是对除简单事物之外的任何事物都使用递归函数。这样做的问题是递归函数在运行时的开销很大(尤其是当您要多次调用自己时)。

那么是否可以实现 2 个函数,一个用于 constexpr,另一个用于正常使用:

constexpr int fact(int x){  //Use this at compile time
return x == 0 ? 1 : fact(x-1)*x;
}

int fact(int x){ //Use this for real calls
int ret = 1;
for (int i = 1; i < x+1; i++){
ret *= i;
}
return ret;
}

按照同样的思路,您是否也可以为内联情况创建一个特殊函数?

最佳答案

自 C++14 起,循环形式是符合 (http://en.cppreference.com/w/cpp/language/constexpr) 的有效 constexpr,因此添加了 constexpr 的第二种形式是有效的。不幸的是,并非所有编译器都支持这一点(最新版本的 Visual C++ 不支持,但最新的 Clang 和 GCC 版本显然支持(但我无法对此进行测试))。

在这种情况下,您可以:

  • 依靠编译器优化,并使用第一个版本(您可能想针对您的特定编译器测试它)
  • 为两种形式赋予不同的名称(例如fact_const 用于constexpr 函数,并确保您仅在使用时使用constexpr 版本参数也是constexpr(我不知道如何实际检查是否是这种情况)
  • 等到您的编译器发布支持此功能的更新。

关于c++ - 同一函数的两个版本(用于内联或 constexpr),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36993505/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com