複製構造函數調用關閉GCC編譯器優化

在linux下,編譯器有時會對複製構造函數的調用做優化,避免不必要的複製構造函數調用。可以使用命令g++ xxx.cpp -fno-elide-constructors命令關閉編譯器優化。

例如下面代碼的執行結果:

#include <iostream>

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; }
    ~Point() {}
private:
    int x, y;
};

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

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

Point fun2()
{
    Point a(1, 2);
    return a;
}


int main()
{
    Point a(4, 5);
    Point b = a;
    cout << b.getX() << endl;

    fun1(b);
    b = fun2();
    cout << b.getX() << endl;

    return 0;
}

使用g++ xxx.cpp && ./a.out命令輸出結果爲:

Calling the copy constructor
4
Calling the copy constructor
4
1

而使用g++ xxx.cpp && ./a.out命令關閉編譯器優化後,輸出結果爲:

Calling the copy constructor
4
Calling the copy constructor
4
Calling the copy constructor
1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章