gpt4 book ai didi

c++ - 是否可以仅在 if 语句的范围内定义变量,类似于 for 循环的常见做法?

转载 作者:太空狗 更新时间:2023-10-29 20:25:27 25 4
gpt4 key购买 nike

有没有一种方法可以声明、分配变量并将其与 if 构造中的表达式进行比较,使其仅在 if 构造的范围内定义?

这是可行的(声明和赋值,当然条件只是函数 f 的返回值是否为零):

int main()
{
if(int i = f())
{
printf("%d", i);
// i is defined here!
}
else
{
// Here too!
}
// But not here!
}

但是当我尝试将 i 的值与实际表达式进行比较时,我遇到了麻烦:

int main()
{
// Does not compile because "int i = f()" is not a primary expression?
if((int i = f()) == 3)
{
printf("%d", i);
}
}

从行为的角度来看,围绕整个 if 构造创建一个范围可以解决问题,但在我看来它看起来很丑陋:

int main()
{
{
int i = f();
if(i == 3)
{
printf("%d", i);
// i is defined here!
}
// here too!
}
// i is not defined here!
}

我正在与 for 循环和开关的外观和感觉进行比较,其中声明和分配变量非常简洁,因此它仅在相关范围内定义。当然变量的值没有与那里的任何东西进行比较,我并不是说它是同一件事:

for(int i = 0;;)
{
break;
}
// i is not defined here

switch(int i = f())
{
default: break;
}
// i is not defined here!

总结一下,有没有一种方法可以将变量的定义绑定(bind)到“if”的范围,就像它通常绑定(bind)到 for 和(可能不那么常见)switch 的范围一样,并且您实际上在哪里将变量的值与作为 if 语句条件的表达式进行比较?

最佳答案

据我所知,在if 语句 的条件下,无法同时拥有声明和表达式。如果我们查看 C++ 标准草案 6.4 Selection statementsif 的语法如下:

selection-statement:
if ( condition ) statement
if ( condition ) statement else statement
switch ( condition ) statement
condition:
expression
attribute-specifier-seqopt decl-specifier-seq declarator = initializer-clause
attribute-specifier-seqopt decl-specifier-seq declarator braced-init-list

因此您可以使用表达式声明,我看不出有任何明显的解决方法。

您在备选方案中提出的建议是,在 if 语句 之前声明 i 似乎是最佳选择。尽管似乎没有必要使用封闭 block :

int i = f();
if(i == 3)

关于c++ - 是否可以仅在 if 语句的范围内定义变量,类似于 for 循环的常见做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24017216/

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