【问题标题】:Follow-up: What exactly is a variable in C++14/C++17?追问:C++14/C++17中的变量究竟是什么?
【发布时间】:2018-12-08 23:30:06
【问题描述】:

正如标题所示,this question has been asked before. 但是,答案与 C++03/0x(11) 有关。 C++11 (N3337) 对变量这么说:

[basic]/6:

变量是由非静态数据成员或对象以外的引用的声明引入的。变量名表示引用或对象。

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

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

变量的名称,如果有,表示引用或对象。

这意味着一个变量不一定有一个名字。

对第一句的不同解释可能表明变量名称,因为表示对象/引用的名称也由此类实体的声明引入.但是第二句话与“变量名”这一短语相矛盾。那么,variable 现在是否只是 objectreference 的上位词,无论是否命名?

【问题讨论】:

  • 指向变量的指针不是名称,但变量存在。
  • @vcloarec 指针本身必须有一个名称。通过获取变量地址产生的 r 值不是变量。
  • 可能由stackoverflow.com/a/31234708 回答,但不是真正重复的问题,因为其他问题没有询问这方面。
  • @George :我想说明一个变量不一定有名字。
  • @vcloarec “指向变量的指针不是名称,但变量存在。”没有说明这一点。我承认不知道“如果有”部分的实际含义,但同样,指针变量必须有一个名称,并且通过获取对象的地址(指针与否)生成的 r 值不会自动变量。

标签: c++ c++14 language-lawyer standards


【解决方案1】:

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

catch (std::exception&) // <==
{ 
}

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

保持不变的第一句话仍然是术语变量的完整定义。

【讨论】:

  • 那么,所有声明的对象和引用(非静态数据成员的引用除外),无论是命名的还是未命名的,都是变量?
猜你喜欢
  • 2012-05-17
  • 2012-10-16
  • 2011-08-06
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
  • 2018-02-10
  • 2015-03-04
相关资源
最近更新 更多