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

C++ constructor without parameter name

本文关键字:C++ 构造函数 参数      更新时间:2023-10-16

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

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&)中没有参数名称,可以吗?如果是,这样的构造函数有什么用?

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

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]

旁注:不确定您是否引用了默认/值初始化的动态分配。

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