在C++中,我们可以直接在if语句中声明变量,并将其值作为条件,例如
if (SubClass *subObject = dynamic_cast<SubClass *>(baseObject)) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我一直认为这是一个“相对”的新特性,最早是在 C++11 中引入的,但是当我试图确认这一点时,我没有找到相关信息,只有 C++17 扩展了语法更进一步。当我尝试用 编译一个最小的例子时-std=c++98,它起作用了。那么这从一开始就是 C++ 的一个特性吗?
第一个正式的C++ 标准是 ISO/IEC 14882:1998(又名 C++98)。在这个“草稿”版本中,if明确提到了语句中变量的声明:
6.4 选择语句[stmt.select]
...
3 由条件中的声明引入的名称(由类型说明符序列或条件的声明符引入)的范围从其声明点到由条件控制的子语句结束。如果在由条件控制的子语句的最外层块中重新声明名称,则重新声明名称的声明格式错误。[例子:Run Code Online (Sandbox Code Playgroud)if (int x = f()) { int x; // ill-formed, redeclaration of x } else { int x; // ill-formed, redeclaration of x }—结束示例]
所以,就正式标准而言:是的,它“从一开始就存在”。
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |