类和函数返回类型混淆的实例

时间:2013-02-16 17:24:20

标签: c++ class function-prototypes

我不能这样做:

class A
{
    public:
    A()
    {
    }

};

A a1();

因为A a1();看起来像是一个函数原型。

但我可以这样做:

class B
{
    public:
    B(std::string argument)
    {
        std::cout << argument;
    }
};

B b1("Text");

这两件事基本相同,只是编译器能够将B b1("Text");区分为NOT不是函数原型,因为有些数据是在括号中传递的。

为什么必须为A省略括号,或者原因是因为编译器认为它是函数定义?

1 个答案:

答案 0 :(得分:0)

就是这样,它被称为最令人烦恼的解析。原因是如果将A a1();视为对象声明,则无法使用该原型声明函数。并且你希望能够声明一个函数,对吧?

B b1("Text");有效,因为它不能被视为函数原型,但是,例如B b(A());可以和将来。