指针增量 - 很奇怪

use*_*961 2 c++ pointers

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;
Run Code Online (Sandbox Code Playgroud)

当我编译这一行时:

x = p->size_ + (p++)->size_;
Run Code Online (Sandbox Code Playgroud)

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

x = p->size() + (p++)->size();
Run Code Online (Sandbox Code Playgroud)

然后我得到不同的结果.'p'不会与上一行同时增加.有人可以解释一下吗?试过VS 2008和VS 2010.

joh*_*ohn 5

在没有插入序列点的情况下单独读取和修改变量是未定义的行为.你已经看到了一个很好的例子.