c++ - 初始化语句条件表达式 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”是初始化语句。但
- 那么在我给出的示例中,条件语句丢失并且条件语句未标记为可选
- 并且 init 语句不以分号结尾。
已编辑:删除了不正确的陈述。
解决方案
这不是新的 C++17 语法。它一直都在那里。
int x = 4
在您的第一个示例中,不是init -statement,而是您引用的语法规则中的条件。
条件可以是表达式或带有初始化程序的声明(以及一些其他限制)。如果它具有后一种形式,则声明在 的分支中引入声明的变量,if
如果声明的变量在上下文转换为,在其初始化后bool
产生,则选择第一个分支。true
推荐阅读
- html - 将 html 、 css 页面连接到页眉和页脚
- c# - ASP.NET Core 3.1 SignalR:未调用方法
- kotlin-coroutines - Kotlin Coroutines:Hot Flow 掌握线程
- react-native - 在带有 wix/react-native-navigation 的模态中使用 react-native-gesture-handler (RNGH)
- c - 是否可以查看/修改通用 Windows 虚拟打印驱动程序的代码以重定向“打印”文件的发送位置?
- python - 从漂亮的汤对象中提取文本时出现类型错误
- python - 在 Git Bash 中运行 pip freeze - TypeError: 'module' object is not callable
- mysql - 使用 information_schema.processlist 创建 MySQL 登录触发器?
- azure - “api”注入html的Azure B2C控件布局
- c# - 分组并转换为 c# 上的新实体