C++ - 以指针作为数据字段的复制构造函数

标签 c++ pointers class-constructors

我有以下代码:-

#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

最佳答案

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

执行为:

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

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

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

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

关于C++ - 以指针作为数据字段的复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34690532/

相关文章:

c 双指针给出没有意义的错误

c++ - 如何初始化指针成员以指向其封装实例?

c - 指向以指向 typedef 类型的指针为模型的整数类型的指针

c++ - 在没有范围解析运算符的情况下实现类?

c++ - 找出哪个对象/数组使用最多的堆栈内存

c++ - 创建对象时是否初始化类中的成员值?

c++ - 无法理解 C++ 中的可变参数模板

c++ - 从头文件定义嵌套类

java - 构造函数中的多个参数

java - 如何将一个构造函数的值设置为另一个构造函数的值?