gpt4 book ai didi

C++, 'if' 表达式中的变量声明

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

这是怎么回事?

if(int a = Func1())
{
// Works.
}

if((int a = Func1()))
{
// Fails to compile.
}

if((int a = Func1())
&& (int b = Func2()))
)
{
// Do stuff with a and b.
// This is what I'd really like to be able to do.
}

2003 标准中的第 6.4.3 节解释了在选择语句条件中声明的变量如何具有延伸到条件控制的子语句末尾的范围。但我看不出它在哪里说不能在声明周围加上括号,也没有说每个条件只有一个声明。

即使在条件中只需要一个声明的情况下,此限制也很烦人。考虑一下。

bool a = false, b = true;

if(bool x = a || b)
{

}

如果我想在 x 设置为 false 的情况下进入 'if'-body 范围,则声明需要括号(因为赋值运算符的优先级低于逻辑 OR),但由于不能使用括号,因此需要声明x 在主体之外,将该声明泄漏到比预期更大的范围内。显然这个例子是微不足道的,但更现实的情况是 a 和 b 是返回需要测试的值的函数

那么我想做的事情是否不符合标准,或者我的编译器只是破坏我的球(VS2008)?

最佳答案

从 C++17 开始,您尝试执行的操作 is finally possible :

if (int a = Func1(), b = Func2(); a && b)
{
// Do stuff with a and b.
}

注意使用 ; 代替 , 来分隔声明和实际条件。

关于C++, 'if' 表达式中的变量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7836867/

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