Jas*_*son 5 c++ constructor copy-constructor default-constructor
这是一个简单的C++构造函数概念,我遇到了麻烦.
鉴于此代码段:
#include <iostream>
using namespace std;
class Foo
{
public:
Foo () { cout << "Foo()" << endl; }
~Foo () { cout << "~Foo()" << endl; }
};
int main()
{
Foo f1;
Foo f2();
}
Run Code Online (Sandbox Code Playgroud)
输出是:
Foo()
~Foo()
Run Code Online (Sandbox Code Playgroud)
好像Foo f2();什么也没做.什么是 Foo f2();和为什么没有做任何事情?
Foo f2();声明一个名为的函数f2,该函数不带参数并返回一个类型的对象Foo
还要考虑一个内部也有复制构造函数的情况 Foo
Foo (const Foo& obj)
{
cout << "Copy c-tor Foo()" << endl;
}
Run Code Online (Sandbox Code Playgroud)
如果您尝试写作Foo obj(Foo()),在这种情况下,您可能会期望调用复制c-tor,这是不正确的.
在这种情况下,obj将被解析为返回Foo对象并将类型指针的参数转换为函数的函数.这也被称为Most Vexing Parse.
正如其中一条评论中所提到的那样Foo obj((Foo()));,编译器会将其解析为表达式(即将其解释为对象)而不是函数,因为它是额外的().