为什么非静态数据成员引用而不是一个变量?(Why is a non-static data memb

2019-08-01 17:02发布

在C 变量的定义++ 11是如下(§3/ 6):

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

因此,一个非静态数据成员引用不是变量。 为什么这种区别有必要吗? 这里有什么道理呢?

Answer 1:

这是我可以声明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? 这是一句废话。

快速注脚:标准,这里的语言有关引用具体讲,反而使例子更容易,我已经使用非引用了。 我希望你能看到这并没有改变它的原则。



文章来源: Why is a non-static data member reference not a variable?