【问题标题】:Copy and Base Constructor don't initialize C++ [duplicate]复制和基本构造函数不初始化 C++ [重复]
【发布时间】:2017-10-20 19:54:49
【问题描述】:

当使用默认构造函数参数调用构造函数时,不会构造任何对象。

    class cl{
private:
public:
    cl(){cout << "Default used" << endl;};
    cl(const cl & cl_object) {cout << "Copy used" << endl;};
    cl & operator=(const cl & cl_object){cout << "Assignment used" << endl; return *this;};
};

当我写作时:

cl(cl()); 

没有消息显示。

问题: 1)为什么没有构造对象? 2) 为什么不使用复制构造函数?

【问题讨论】:

  • @NathanOliver 你能解释一下这是怎么重复的吗?
  • 就像答案所说,cl(cl()); 声明了一个函数。因为它是一个函数而不是一个变量,所以你不会看到任何构造函数调用,因为你不构造任何东西。
  • @NathanOliver 所以如果我使用 cl() 正确理解它;只构造一个对象但使用 cl(cl());声明一个函数。但是如果它声明了一个函数,编译器不应该输出一个错误,因为我没有指定返回类型吗?

标签: c++ class oop constructor


【解决方案1】:

最麻烦的解析

cl(cl());

被解析为函数声明。

【讨论】:

  • 由于我没有指定返回类型,编译器不应该输出错误吗?
  • 我的理解是它是一个名为 cl 的函数,其参数类型为 cl。但它仍然没有返回类型。在我的编译器中,如果我没有指定返回类型,它会返回一个错误。那么这里发生了什么?
  • Is 被解析为c1 c1() 所以函数c1(隐藏类c1)返回类型为c1(类)。
  • 嗯.. 感谢您的澄清。如果可能的话,您能否将其添加到其他有相同问题的人的答案中?
  • 有一个副本。所以我期待流量的重定向。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多