这是一个简单的C ++构造函数概念,我遇到了麻烦。
鉴于此代码段:
#include <iostream>
using namespace std;
class Foo
{
public:
Foo () { cout << "Foo()" << endl; }
~Foo () { cout << "~Foo()" << endl; }
};
int main()
{
Foo f1;
Foo f2();
}
输出结果为:
Foo()
~Foo()
似乎Foo f2();
没有做任何事情。什么 Foo f2();
为什么没有做任何事情?
答案 0 :(得分:9)
Foo f2();
声明一个名为f2
的函数,它不接受任何参数并返回Foo
类型的对象
还要考虑在Foo
Foo (const Foo& obj)
{
cout << "Copy c-tor Foo()" << endl;
}
如果您尝试编写Foo obj(Foo())
,在这种情况下,您可能会期望调用复制c-tor,这是不正确的。
在这种情况下,obj
将被解析为返回Foo对象并将类型指针的参数转换为函数的函数。这也称为最令人烦恼的解析。
正如其中一条评论中所提到的Foo obj((Foo()));
会使编译器将其解析为表达式(即将其解释为对象)而不是函数,因为额外的()
。
答案 1 :(得分:4)
您实际上是将f2声明为不带参数的函数并返回Foo。