【问题标题】:How and where is it possible that a variable does not has an associated name in C++?一个变量在 C++ 中如何以及在哪里可能没有关联的名称?
【发布时间】:2020-10-13 16:21:11
【问题描述】:

在 C++17 标准中声明(强调我的):

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

来源:ISO/IEC 14882:2017 (C++17),§6/6 -“基本概念”

为什么是“如果有的话”? C++中变量可以省略名字吗?

如果我查看 cppreference:

“在C++中,变量其实只是保留给程序使用的一点内存。你用变量名来引用它,所以你不用担心它在内存中的位置(尽管您可以找到它的内存地址,甚至可以指定它的位置,如果您愿意的话)。”

来源:https://en.cppreference.com/book/intro/variables

或维基百科(我知道它不是最好的来源,但仍然很常见):

“在计算机编程中,变量或标量是一个存储地址(由内存地址标识)与相关的符号名称配对,其中包含一些已知或未知数量的信息,称为值。变量名是引用存储值的常用方式,除了引用变量本身,具体取决于上下文。”

来源:https://en.wikipedia.org/wiki/Variable_(computer_science)

这表示变量应始终提供与其关联的名称,而不管引用的对象/值是否被它访问。


  • C++ 中变量是否可能没有名称?

  • 如果是,如何以及在哪里(如果可能有多种情况)?

或者如果我误解了什么,那么“if any”该如何解释?


相关:

What is the difference between a variable, object, and reference?

【问题讨论】:

  • void foo(int /*no name*/)?
  • 是函数参数,注释是占位符。
  • @RobertSsupportsMonicaCellio 变量是问题中引用的任何对象或引用的声明。该函数声明了一个参数,它是一个int 类型的对象。所以是的,它是一个变量。注释不是声明,所以不,它不是变量。
  • @RobertSsupportsMonicaCellio 函数定义也可以省略参数名称,如果不使用参数。
  • @KamilCuk 这会创建一个无名对象,但它不是变量,因为它不是对象或引用的声明

标签: c++ variables reference language-lawyer identifier


【解决方案1】:

如 cmets 中所述,

void foo(int) {}
//          ^

定义一个没有名字的变量。

[basic.pre]/6:

通过声明非静态数据成员或对象以外的引用来引入变量。

它显然不是一个引用,但它是一个对象吗?是的。

[intro.object]/1

对象是由定义创建的,[...]

而函数定义的参数就是定义([basic.def]/2)。

【讨论】:

  • @RobertS 你不能,因为它没有名字。
  • @RobertSsupportsMonicaCellio parameter name omitted, C++ vs C
  • @RobertSsupportsMonicaCellio 正确,我个人想不出另一个例子
  • 虽然匿名类/联合/枚举类型的成员可能符合条件
  • @RobertS 是的。这是另一个:` = delete;`d 函数是定义,对它们来说,不命名参数可能是有意义的。
猜你喜欢
  • 2020-06-06
  • 2012-06-30
  • 2012-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
  • 2016-10-10
  • 1970-01-01
相关资源
最近更新 更多