没有参数名称的C ++构造函数

时间:2014-10-13 09:34:25

标签: c++ constructor

我对此代码中构造函数的行为感到困惑。

class htc {
  public:
  htc() { std::cout << "HTC_FOO_CONSTRUCTOR" << std::endl ;}
  htc(const htc&) { std::cout << "HTC_BAR_CONSTRUCTOR" << std::endl;};
};

int main() 
{
  htc one; // This outputs HTC_FOO_CONSTRUCTOR
  htc two(); // This outputs nothing 
  htc three(one)
}

htc two()中使用括号的含义是什么意思? &安培;在构造函数htc(const htc&)中没有参数名称这可以吗?如果是,是否使用了这样的构造函数?

1 个答案:

答案 0 :(得分:1)

您正在声明一个函数,而不是调用构造函数:

class htc {
  public:
  htc() { std::cout << "HTC_FOO_CONSTRUCTOR" << std::endl ;}
  htc(const htc&) { std::cout << "HTC_BAR_CONSTRUCTOR" << std::endl;};
};

int main() 
{
  htc one; // This outputs HTC_FOO_CONSTRUCTOR
  htc two(); // Function declaration
  htc three(one); // Outputs HTC_BAR_CONSTRUCTOR
}

clang也触发了这个解释性警告:

  

警告:空括号被解释为函数声明[-Wvexing-parse]

旁注:不确定您是否使用default / value初始化来引用动态分配。

对于你的第二个问题:拥有一个没有正式参数名称的构造函数是完全可以接受的(尽管你并不真的需要那个参数,但它通常是为了符合接口)。当检测到这种情况(即复制构造)时,您可能想要做其他事情。