我读了:
\n(意味着变量名只是标识符的一种情况)
\n在标准 C++ 术语中,我们可以将结构体或类的实例名称视为变量吗?或者我们应该只称其为“标识符”吗?
\n我知道这绝对是一个菜鸟问题,但即使我尝试从多个来源读取变量的定义,我自己也确实无法回答这个问题。请帮忙。
\nTl;dr:变量通常是一个命名对象,或者是对对象的引用。有些变量没有名称,有些变量没有关联的对象,但这些都是例外。
\n现行标准6.1中规定:
\n\n\n变量是通过引用[...]或对象的声明引入的。
\n
该标准很小心地没有说“创建”,因为运行时的创建点将与这个“介绍”不同,特别是对于引用而言。静态代码中的名称在声明之后可用;该对象在运行时的某个时间可用。在引用的情况下,对象实际上可能已经消失,但变量可能仍在范围内(例如,当您从函数返回对局部变量的引用时)。
\n我们看:
\nint i;int i; int &ri{i};int &f(){int i; return i;} int &r = f();它继续
\n\n\n变量\xe2\x80\x99的名称(如果有)表示引用或对象。
\n
int &f(int /*unused*/) {}但并非所有未命名对象都是变量:
\nint *p = new int{};
p当然,是一个变量;它int指向的不是一个对象,即使它是一个对象。
当然,如果您是矛盾修饰法的朋友,那么还有常量变量。还有一些名称不是变量,例如标签。
\n你实际上在问两个问题。标题是“结构体或类的实例可以被视为变量吗?” 答案是实例本身不是变量;实例本身不是变量。它只是一个对象。new您可以使用上面示例中的创建一个int。这将是一个实例,但不是一个变量(如果将地址分配给指针,则该指针将是一个包含地址的变量)。
在问题正文中,您会问一些不同的问题:“我们可以将结构体或类的实例的名称视为变量吗?” 我想说这是正确的:变量(通常)是命名对象。顺便说一句,它是结构体还是内置类型在这里并不重要。
\n