【问题标题】:C++ constructor without parameter name [duplicate]没有参数名称的C ++构造函数[重复]
【发布时间】:2014-10-13 09:34:24
【问题描述】:

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

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

【问题讨论】:

  • two 不是变量。这是一个函数。
  • htc two(); 声明了一个名为 two 的函数,它返回 htc 类型

标签: c++ constructor


【解决方案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 初始化的动态分配。

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

【讨论】:

  • 既然 OP 询问了其他问题,我将把它留在这里。
猜你喜欢
  • 2021-05-31
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-04
  • 1970-01-01
相关资源
最近更新 更多