初始化语句条件表达式 C++
Init-Statment Conditional Expression C++
有人可以向我解释一下 if 语句中的初始化吗?
这里的问题和我的几乎一样但是我觉得那里的回答不够充分。
为什么这样做?
if( int x = 4 ){
std::cout << x;
}
我的印象是初始化没有 return 值。实际上下面的代码是错误的:
std::cout << ( int y = 7 );
引用标准 N4380,语法应为:
"if constexpr_opt ( init-statement_opt condition ) statement"
并进一步引用:
"形式的if语句
if constexpr_opt (init-statement condition) 语句
相当于
{
初始化语句
if constexpr_opt(条件)语句
}"
还有:
""注意:初始化语句以分号结尾。
——尾注]
我可以想象 "int x=4" 是初始化语句。但是
- 然后条件语句,在我给出的例子中,缺少并且条件语句是 not marked as optional
- 并且初始化语句不以分号结尾。
已编辑:删除了一个不正确的陈述。
这不是新的 C++17 语法。它一直在那里。
int x = 4
在您的第一个示例中 不是 init-statement,而是 condition在你引用的语法规则中。
condition 可以是表达式或带有初始值设定项的声明(以及一些其他限制)。如果它具有后一种形式,则声明在 if
的分支中引入声明的变量,如果声明的变量根据上下文转换为 bool
,则选择第一个分支,产生 true
初始化后。
有人可以向我解释一下 if 语句中的初始化吗?
这里的问题和我的几乎一样
为什么这样做?
if( int x = 4 ){
std::cout << x;
}
我的印象是初始化没有 return 值。实际上下面的代码是错误的:
std::cout << ( int y = 7 );
引用标准 N4380,语法应为:
"if constexpr_opt ( init-statement_opt condition ) statement"
并进一步引用:
"形式的if语句 if constexpr_opt (init-statement condition) 语句 相当于
{ 初始化语句 if constexpr_opt(条件)语句 }"
还有:
""注意:初始化语句以分号结尾。 ——尾注]
我可以想象 "int x=4" 是初始化语句。但是
- 然后条件语句,在我给出的例子中,缺少并且条件语句是 not marked as optional
- 并且初始化语句不以分号结尾。
已编辑:删除了一个不正确的陈述。
这不是新的 C++17 语法。它一直在那里。
int x = 4
在您的第一个示例中 不是 init-statement,而是 condition在你引用的语法规则中。
condition 可以是表达式或带有初始值设定项的声明(以及一些其他限制)。如果它具有后一种形式,则声明在 if
的分支中引入声明的变量,如果声明的变量根据上下文转换为 bool
,则选择第一个分支,产生 true
初始化后。