gpt4 book ai didi

c++ - 如果有 constexpr if 语句,为什么没有其他 constexpr 语句呢?

转载 作者:IT老高 更新时间:2023-10-28 22:23:28 29 4
gpt4 key购买 nike

是否有任何理由只将 if constexpr 包含在 C++17 中?

我可以这样做:

template <int N>
constexpr int fib() {
if constexpr (N == 1 || N == 2) {
return 1;
} else {
return fib<N - 1>() + fib<N - 2>();
}
}

为什么 C++ 委员会也没有考虑 switch constexpr

template <int N>
constexpr int fib() {
switch constexpr (N) {
case 1:
case 2: return 1;
default: return fib<N - 1>() + fib<N - 2>();
}
}

switch constexpr

看起来更酷了

甚至在不使用模板替换/递归模板函数的情况下,使用 for constexpr/while constexpr 展开过早的编译时循环:

constexpr void printFoo() {
for constexpr (auto i = 0; i < 10; i++) {
cout << fib<i>() << endl;
}
}

它们会被包含在 C++20/ future 版本的 C++ 中吗?

最佳答案

if constexpr 是在相对接近 C++17 最终确定的时候提出的。

装饰(如 switch)可能推迟了它的包含。

像强制循环展开这样的花哨的肯定会有。

改变 C++ 标准需要真正的努力。您必须自己在编译器中实现它,以证明它可以完成,说服其他编译器编写者它应该很容易或值得努力,弄清楚它应该如何在标准中措辞清晰明确,说服其他成员委员会认为您的更改不仅仅是语言等方面的问题。

的事情发生不需要理由。事情不会一直发生。除非有人阻止,否则 C++ 的改进并不是自然发生的过程,

Tl;dr:因为你没有提出它并通过标准化来处理它。从今天开始,它可能在 C++20 中。 “我不配”求婚不是借口:这是需要做的工作,而不是因出色而获得的奖励。一个人通过工作变得很棒。 “我很懒”是一个借口,我非常熟悉。

关于c++ - 如果有 constexpr if 语句,为什么没有其他 constexpr 语句呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45705573/

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