2

我有以下代码:-

#include <iostream>
using namespace std;

class A { 
    int *val;
public:
    A() { val = new int; *val = 0; }
    int get() { return ++(*val); } 
};

int main() {
    A a,b = a;

    A c,d = c;

    cout << a.get() << b.get() ;
    cout << endl ; 

    cout << c.get() << endl ;//
    cout << d.get() << endl;
    return 0;
}

它产生的输出为: -

21
1
2

c.get 和 d.get 的行为很容易理解。c 和 d 共享同一个指针 val,a 和 b 共享同一个指针 val。

所以 c.get() 应该返回 1 并且 d.get() 应该返回 2。但我期待 a.get() 和 b.get() 中的类似行为。(也许我没有正确理解 cout)

我无法理解 a.get() 是如何产生 2 的。

你能解释一下为什么我会得到这样的输出吗?据我说,输出应该是: -

12
1
2
4

1 回答 1

6
cout << a.get() << b.get() ;

被执行为:

cout.operator<<(a.get()).operator<<(b.get());

在这个表达式中,是a.get()先调用还是先b.get()调用不是由语言指定的。它依赖于平台。

您可以将它们分成两个语句,以确保它们以预期的顺序执行。

cout << a.get();
cout << b.get();
于 2016-01-09T06:43:34.037 回答