【问题标题】:Confusion in C++ constructorC ++构造函数中的混淆
【发布时间】:2018-04-01 06:36:20
【问题描述】:
#include <iostream>
using namespace std;

class Obj {
public:
    Obj(){cout <<"create obj" << endl;}
    Obj(const Obj& other){cout<<"copy create obj"<<endl;}
    ~Obj(){cout<<"destructed obj"<<endl;}
};

int main() {
    Obj(Obj((Obj())));
    cout<<"---- exit main ----"<<endl;
}

我不知道为什么这个程序只打印出 1 个 create obj 和 1 个 destructed obj。帮助。

【问题讨论】:

  • 只是为了好玩试试这个:Obj{Obj{{Obj{}}}};
  • 哦! c++编译器不优化这种格式?为什么???

标签: c++ class oop object constructor


【解决方案1】:

因为复制省略。阅读更多关于它的信息here。你的编译器明白,它可以避免复制对象,只创建一个对象。

【讨论】:

  • 哦!非常感谢!很难想象 C++ 编译器在底层做了什么。
  • 另一个小问题:c++编译器没有优化这种格式,比如Obj{Obj{{Obj{}}}},为什么???
  • @chenyuandong 它对我有用,在 GCC 8 下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-20
  • 2017-03-18
  • 1970-01-01
  • 2014-03-22
  • 2014-01-13
  • 1970-01-01
相关资源
最近更新 更多