2012-10-22 27 views
2
struct BLA 
{ 
    int size_; 

    int size()const{ return size_; } 
} 

int x; 
BLA b[ 2 ]; 
BLA * p = &b[ 0 ]; 

b[ 0 ].size_ = 4; 
b[ 1 ].size_ = 6; 

当我编译这一行:指针增量 - 怪异

x = p->size_ + (p++)->size_; 

我收到了预期的结果。但是,当我编译这一行(没有前一个):

x = p->size() + (p++)->size(); 

然后我得到不同的结果。 'p'不会像前一行那样增加。有人可以解释这一点吗?尝试VS 2008和VS 2010.

+0

你会在第一个和第二个案例中发布结果吗? –

+1

这是UB。非常类似棘手的问题:“++ i ++的结果是什么?” – keltar

+0

@Lyubomir,第一个案例8,第二个案例10。 – user1764961

回答

5

它是未定义的行为,单独读取和修改一个变量,没有介入序列点。你已经看到了一个很好的例子。

1

当我编译你的代码时,x在我的两种情况下都是8。两者分开使用,并结合使用。我想指出的是,使用p ++被认为是未定义的行为,并且它警告我的那一行是该行。

但是,编译器警告我说warning: operation on 'p' may be undefined

编辑:我想指出适当的指针算术将是:x = p->size_ + (p+1)->size_;在这种情况下。