大括号对于空构造函数是否重要
Does curly brackets matter for empty constructor?
我想知道以下构造函数对于C++是否相同:
class foo
{
public:
foo(void){};
...
}
和
class foo
{
public:
foo(void);
...
}
大括号对这两种情况重要吗?多谢!
它们不一样。 {}
表示一个常规的函数体,并做出前一个函数定义。
foo(void){}; // function definition
foo(void); // function declaration
是的,他们这样做。第二个将生成undefined reference to foo::foo
(除非在另一个地方定义)。如果可以使用C++11或以上,则可以使用
foo()=default;
定义编译器生成的构造函数
这些括号声明一个空的内联构造函数。在这种情况下,对于它们,构造函数确实存在,它只是只做构造函数不会隐式做的更多。
在第二种情况下,如果没有它们,编译器将期望在其他地方实现 - 例如.cpp文件。
是的。没有它只是一个宣言。两者都是声明和定义。尝试使用它 - 如果没有定义,您将收到链接器错误
相关文章:
- 无论如何,我可以确定构造函数是否存在吗?
- 使用 CTRP 时,是否访问访问父构造函数 UB 中的子属性?
- C++矢量复制构造函数和赋值运算符是否也复制保留空间?
- C++方法是否可以根据传递给构造函数的参数具有不同的返回类型?
- 如何检测除整数以外的任何内容是否传递给我的类构造函数?
- 你能在类和构造函数中初始化吗,这是否正确?
- 在对象构造期间,将指向尚未构造的子对象的指针传递给另一个子对象的构造函数是否危险?
- 在 constexpr 构造函数中初始化数组是否合法?
- 如果这不是类的"复制构造函数",是否可以移动对象?
- 为什么复制构造函数不需要检查输入对象是否指向自身?
- std::shared_ptr 使用别名构造函数,是否可以检索初始指针值?
- 构造函数是否有一种现代C++方法来了解其'container'类?
- 如果我也使用复制构造函数并且重载 = 运算符,我是否需要析构函数?
- 我是否需要在构造函数中显式初始化 std::unique_ptr?
- 是否可以避免在以下代码中复制/移动构造函数的需要?
- 使用 lambda 作为构造函数参数是否需要C++ 17?
- C++,是否有可能/如何定义在.h和.cpp源文件中调用函数的类构造函数
- 移动构造函数是否C++过时?
- 如何构造一个类型特征,可以判断一个类型的私有方法是否可以在另一个类型的构造函数中调用?
- 在 c++ 中将对象设置为等于同一类的构造函数是否有效?