后续:C++ 14/C++ 17中的变量究竟是什么?

TSm*_*ith 9 c++ standards language-lawyer c++14

正如标题所暗示的那样,之前已经提出了这个问题.但是,答案与C++ 03/0x(11)有关.C++ 11(N3337)对变量说了这个:

[基础]/6:

变量是由比非静态数据成员或对象的其他的基准的声明引入.变量的名称表示引用或对象.

这可能意味着变量本质上是命名对象/引用.

但是,在C++ 14/C++ 17中,最后一句改为

变量的名称(如果有)表示引用或对象.

这意味着一个变量并没有必然有一个名字.

对第一句的不同解释可以表明变量名称,因为表示对象/引用的名称也由这些实体的声明引入.但第二句与"变量名"这一概念相矛盾.那么,变量现在只是对象引用的上位词,无论是否命名?

Bar*_*rry 14

此更改是CWG 1769的结果,解决了绑定到未命名的catch处理程序参数的异常对象的状态:

catch (std::exception&) // <==
{ 
}
Run Code Online (Sandbox Code Playgroud)

现在这是一个变量.这简化了异常对象的概念模型.

第一句保持不变,仍然是变量一词的完整定义.