我对此代码中构造函数的行为感到困惑。
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&)
中没有参数名称这可以吗?如果是,是否使用了这样的构造函数?
答案 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初始化来引用动态分配。
对于你的第二个问题:拥有一个没有正式参数名称的构造函数是完全可以接受的(尽管你并不真的需要那个参数,但它通常是为了符合接口)。当检测到这种情况(即复制构造)时,您可能想要做其他事情。