(简单构造函数概念)为什么不Foo();做任何事情?

时间:2011-12-06 05:22:07

标签: 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();
}

输出结果为:

Foo()
~Foo()

似乎Foo f2();没有做任何事情。什么 Foo f2(); 为什么没有做任何事情?

2 个答案:

答案 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。