C ++ 11中变量的定义如下(§3/ 6):
变量是由非静态数据成员或对象以外的引用声明引入的。变量的名称表示引用或对象。
因此,非静态数据成员引用不是变量。为什么这种区分是必要的?这里的理由是什么?
答案 0 :(得分:6)
这是我可以用C ++声明变量的一种方法:
int scientist = 7;
在此声明(和定义,在本例中)之后,我可以使用scientist
来读取和设置其值,获取其地址等。这是另一种声明: -
class Cloud {
public:
static int cumulonimbus = -1;
};
这个有点复杂,因为我必须将新变量称为Cloud::cumulonimbus
,但我仍然可以读取并设置其值,因此它显然仍然是一个变量。这是一种不同的声明: -
class Chamber {
public:
int pot;
};
但在此声明之后,没有名为pot
或Chamber::pot
的变量。实际上根本没有新的变量。我已经声明了一个新类,而当我稍后声明该类的实例时,它将有一个名为pot
的成员,但是现在,没有任何东西被称为。
类的非静态数据成员本身不会创建新变量,它只是帮助您定义类的属性。如果它确实创建了一个新变量,你就可以编写如下代码:
class Chamber {
public:
int pot;
};
void f(bool b) {
if (b)
Chamber::pot = 2;
}
这甚至意味着什么?它是否会找到Chamber
的每个实例并将其所有pot
设置为2?这是胡说八道。
快速脚注:此处标准的语言是专门讨论引用,但为了使示例更容易,我一直在使用非引用。我希望你能看到这并没有改变它的原理。