class foo {
public:
int a;
int b;
foo(int a_, int b_) : a(a_), b(b_) {}
};
int main() {
foo f;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译上面的代码片段时,我收到如下错误消息:
foo.cc: In function 'int main()'
foo.cc:12: error: no matching function for call to 'main()::foo::foo()'
foo.cc:10: note: candidates are: main()::foo::foo(int, int)
foo.cc:6: note: main()::foo::foo(const main()::foo&)
Run Code Online (Sandbox Code Playgroud)
但是如果我用两个整数prarmeters来评论显式构造函数的文件,那么可以编译代码.我猜这个魔法背后的规则是,当你使用参数阐明声明构造函数时,c ++ compilor将不会为你自动生成一个没有参数的默认构造函数.
我对吗?如果是对的,为什么c ++有这样的行为?提前致谢.
仅当没有用户定义的构造函数时,编译器才会生成默认构造函数.
C++标准版12.1/5:
类X的默认构造函数是类X的构造函数,可以在没有参数的情况下调用.如果类X没有用户声明的构造函数,则隐式声明默认构造函数.
| 归档时间: |
|
| 查看次数: |
993 次 |
| 最近记录: |