【发布时间】:2016-09-18 11:40:01
【问题描述】:
我想知道以下构造函数是否与 C++ 相同:
class foo
{
public:
foo(void){};
...
}
和
class foo
{
public:
foo(void);
...
}
大括号对这两种情况重要吗?非常感谢!
【问题讨论】:
标签: c++
我想知道以下构造函数是否与 C++ 相同:
class foo
{
public:
foo(void){};
...
}
和
class foo
{
public:
foo(void);
...
}
大括号对这两种情况重要吗?非常感谢!
【问题讨论】:
标签: c++
他们不一样。 {} 代表一个常规的函数体,使前者成为function definition。
foo(void){}; // function definition
foo(void); // function declaration
【讨论】:
是的。第二个将生成undefined reference to foo::foo(除非在其他地方定义)。如果你可以使用C++11或以上,你可以使用
foo()=default;
定义一个编译器生成的构造函数
【讨论】:
=default 的建议!
foo()=default; 与foo(){} 并不完全相同。第一个是“微不足道”的构造函数,第二个不是。用户定义的构造函数即使是空的也绝不是微不足道的。
这些括号声明了一个空的内联构造函数。在那种情况下,有了它们,构造函数确实存在,它只是做的只是构造函数不会隐式做的事情。
在第二种情况下,没有它们,编译器将期望在其他地方实现 - 例如 .cpp 文件。
【讨论】:
是的。没有它只是一个声明。两者都是声明和定义。尝试使用它 - 如果没有定义,您将收到链接器错误
【讨论】: