2013-07-14 80 views
0
class Axes 
{ 

public: 

    int x; 
    int y; 
    int z; 

}; 

为了寻找我的好奇心,我写下了下面的示例。现在我的问题是关于axes.x,是x变量在这种情况下访问2步或1步,考虑到事实x是在一个类内?换句话说,在访问x变量之前,剂量axes变量被访问,或者axes.x被认为是编译后自己的单个引用?在课堂上访问说明/结构

Axes axes; 
std::cout << axes.x; 

更新:我只是出于某种原因一直以为它是编译的x将被其自己的内存地址,而不必去axes的内存地址访问后。

非常感谢。 ^^

+4

术语“取消引用”适用于指针和类指针对象。这里没有指针,所以没有解除引用。 – interjay

+0

因此,我甚至不知道问题是什么... –

+0

okey我会改变这个词...访问... –

回答

2

不知道问题是什么,因为这里没有deferencing(这是用于指针的一个术语)...

但让我给你一个不同的答案比公布的那些:

由于axes是一个局部变量,编译器知道它是确切的地址,它也知道结构的确切布局,因此它可以直接访问其中的x。编译后的代码不必首先“访问”axes

这当然是在实践中发生了什么......

+0

你得到我的新票Karoly!我强烈相信编译后直接访问'x',正如你所说的那样,在实践中它应该是这样的......我纠正了我对房屋和房间的理解,因为它在编译之前应用可能不适用于后期编译。哇,这很有趣。再次感谢。 ^^ –

1

.是一个运算符(成员访问,不可重载),所以表达式之前的表达式首先被计算,然后用于访问成员。如果foo返回Axes类型的值,则也可以说foo().x

+0

不应该这样,这不是人们通常谈论时,他们提到解引用。 –

1

首先,我认为不会有任何取消引用,因为它是用于指针的术语。

但是对于这里,axes首先被解除引用(实际上作为局部变量被访问)并且.之后的表达式在这种情况下是x

这就像通过大门首先进入家庭,然后再进入特定房间。

+0

我爱你对家和房间的解释。我想我现在明白了......我只是出于某种原因不断思考,在编译完成后,'x'将被自己的内存地址访问,而不必转到'axes'的内存地址。 –

+0

首先请投票给我的答案(并接受标记) 其次,据我所知,它发生在我的答案中添加的方式。 –

+1

再次好吧thanx。 –