首页 > 解决方案 > 初始化语句条件表达式 C++

问题描述

有人可以向我解释 if 语句中的初始化吗?

这里的这个问题与我的C++17 if 带有初始化但没有条件的语句几乎相同,但我觉得那里的响应不够。

为什么这行得通?

if( int x = 4 ){ 
  std::cout << x;
}

我的印象是初始化不返回值。事实上,下面的代码是一个错误:

std::cout << ( int y = 7 );

引用标准 N4380,语法应该是:

“if constexpr_opt (init-statement_opt 条件) 语句”

并进一步引用:

" if constexpr_opt (init-statement condition) 语句形式的 if 语句等价于

{ init-statement if constexpr_opt ( 条件 ) 语句 }"

并且:

“[注意:初始化语句以分号结尾。-结束注释]”

我可以想象“int x = 4”是初始化语句。但

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

标签: c++initializationconditional-statements

解决方案


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

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

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


推荐阅读