C++ 中何时引入了在 if 语句中声明变量的能力?

Det*_*roc 2 c++

在C++中,我们可以直接在if语句中声明变量,并将其值作为条件,例如

if (SubClass *subObject = dynamic_cast<SubClass *>(baseObject)) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我一直认为这是一个“相对”的新特性,最早是在 C++11 中引入的,但是当我试图确认这一点时,我没有找到相关信息,只有 C++17 扩展了语法更进一步。当我尝试用 编译一个最小的例子时-std=c++98,它起作用了。那么这从一开始就是 C++ 的一个特性吗?

Adr*_*ica 5

第一个正式的C++ 标准是 ISO/IEC 14882:1998(又名 C++98)。在这个“草稿”版本中,if明确提到了语句中变量的声明:

6.4 选择语句[stmt.select]

...

3 由条件中的声明引入的名称(由类型说明符序列或条件的声明符引入)的范围从其声明点到由条件控制的子语句结束。如果在由条件控制的子语句的最外层块中重新声明名称,则重新声明名称的声明格式错误。[例子:

if (int x = f()) {
            int x; // ill-formed, redeclaration of x
} else { 
            int x; // ill-formed, redeclaration of x
}
Run Code Online (Sandbox Code Playgroud)

—结束示例]

所以,就正式标准而言:是的,它“从一开始就存在”。