C++ - 以指针作为数据字段的复制构造函数
C++ - Copy constructor with pointers as the data field
我有以下代码:-
#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() 应该 return 1 而 d.get() 应该 return 2。
但我期待 a.get() 和 b.get() 中有类似的行为。 (可能是我没有正确理解cout)
我无法理解 a.get() 是如何生成 2 的。
你能解释一下为什么我会得到这样的输出吗?根据我的说法,输出应该是:-
12
1
2
cout << a.get() << b.get() ;
执行为:
cout.operator<<(a.get()).operator<<(b.get());
在这个表达式中,是a.get()
先调用还是b.get()
先调用,语言没有规定。它取决于平台。
您可以将它们分成两个语句以确保它们以预期的顺序执行。
cout << a.get();
cout << b.get();
我有以下代码:-
#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() 应该 return 1 而 d.get() 应该 return 2。 但我期待 a.get() 和 b.get() 中有类似的行为。 (可能是我没有正确理解cout)
我无法理解 a.get() 是如何生成 2 的。
你能解释一下为什么我会得到这样的输出吗?根据我的说法,输出应该是:-
12
1
2
cout << a.get() << b.get() ;
执行为:
cout.operator<<(a.get()).operator<<(b.get());
在这个表达式中,是a.get()
先调用还是b.get()
先调用,语言没有规定。它取决于平台。
您可以将它们分成两个语句以确保它们以预期的顺序执行。
cout << a.get();
cout << b.get();