gpt4 book ai didi

c++ - C++ constexpr if 语句的灵活性

转载 作者:行者123 更新时间:2023-12-02 09:52:00 24 4
gpt4 key购买 nike

我经常遇到这样的情况:

if (A && B)
{
C();
}
else
{
D();
}
但是当 Aconstexpr ,如果 B 没有办法在 if 语句中表明这一点不也是 constexpr .
此外,启用 constexpr 的解决方法很丑:
if constexpr (A)
{
if (B)
{
C();
}
else
{
D();
}
}
else
{
D();
}
有没有建议 constexpr if语句更灵活,即。考虑哪些条件是 constexpr ?
如果没有,除了假设编译器会做正确的事情(他们并不总是这样做)之外,是否有解决这种情况的方法。

最佳答案

if constexpr不是“更快 if”。这不是 if当条件表达式恰好是常量表达式时使用的语句。它甚至不是 if当您希望编译器在编译时测试条件时使用的语句(编译器能够自行执行此操作)。if constexpr 的含义第二个示例中的用法是表达式 C()除非 A 所表示的条件,否则不意味着是有效的 C++。是真的。这就是为什么你用 if constexpr 保护代码块的原因。 ;这就是为什么一开始就将该功能添加到语言中的原因。显然你可以将它用于其他事情,但如果你关心的只是让编译器在编译时评估条件表达式,你不应该使用 if constexpr .
正是出于这个原因,你所要求的东西没有到来。
看看你的第二个例子,复制 if constexpr 的困难的行为在仅部分是常量表达式的表达式中变得明显。规则需要相当复杂。在您的示例中,D()必须是有效的 C++ 代码,即使 A是真的,因为 B在运行时可能为假。
您需要构建一些相当复杂的规则,以了解此类“部分 constexpr”表达式如何禁止评估各种代码分支。这很容易导致用户难以理解复杂表达式何时会剔除哪些分支,何时不会。
在这些情况下,最好让用户把它写成长格式。

关于c++ - C++ constexpr if 语句的灵活性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63802924/

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