-1

我不能做到这一点:

class A
{
    public:
    A()
    {
    }

};

A a1();

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

但我可以这样做:

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

B b1("Text");

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

是否有任何理由必须为 A 省略括号,或者是因为编译器认为它是一个函数定义?

4

1 回答 1

0

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

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

于 2013-02-16T17:26:12.407 回答