一个C++复制构造函数在不同编译器上(xcode,linux终端,VC6.0)出现结果不一致的问题

本文探讨了C++复制构造函数在Xcode、Linux终端及VC6.0上的行为差异。根据《C++语言程序设计(第四版)》中的例子,作者发现某些编译器可能会对复制构造函数进行优化,导致运行结果不同。实验结果显示,Xcode和VC6.0能成功编译但输出不同,而Linux终端及其他编译器如CodeWarrior和g++则出现错误,部分指出复制构造函数参数问题。
摘要由CSDN通过智能技术生成

郑莉等编著的<C++语言程序设计(第四版)>上类与对象章节,复制构造函数中提到复制构造函数被调用的三种情况,依次为

1)当用类的一个对象去初始化该类的另一个对象时系统自动调用拷贝构造函数实现拷贝赋值

2)当函数的返回值是类对象时,系统自动调用拷贝构造函数

3)如果函数的返回值是类的对象,函数执行完成返回调用者时

并举了一个例子,并特别说明了一点:

在有些编译环境下,该例子的运行结果可能不尽相同,因为编译器有时会针对复制构造函数(拷贝构造函数)的调用做优化,避免不必要的复制构造函数调用;

为了探究复制构造函数被调用的情况,并验证该情况,现书中例子,做了一个修改,修改处,图片也已经注明,源代码如下




#include "iostream.h"
using namespace std;

class Point {public:
    Point(int xx=0,int yy=0) {
        x=xx;
        y=yy;
    }
    Point(Point &p);
    int getX() {
        return x;
    }
    int getY() {
        return y;
    }
private:
    int x,y;
};


Point::Point(Point &p) {
    x=p.x+1;
    y=p.y;
    cout<<"Calling the copy constructor"<<endl;
}

void fun1(Point p) {
    cout<<p.getX()<<endl;
}

Point fun2() {
    Poi
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值