初始化语句条件表达式 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" 是初始化语句。但是

已编辑:删除了一个不正确的陈述。

这不是新的 C++17 语法。它一直在那里。

int x = 4 在您的第一个示例中 不是 init-statement,而是 condition在你引用的语法规则中。

condition 可以是表达式或带有初始值设定项的声明(以及一些其他限制)。如果它具有后一种形式,则声明在 if 的分支中引入声明的变量,如果声明的变量根据上下文转换为 bool,则选择第一个分支,产生 true初始化后。