-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");これら 2 つのことは、一部のデータが括弧内に渡されるため、コンパイラが関数プロトタイプではないことを区別できることを除いて、本質的に同じ です。

A の角かっこを省略しなければならない理由はありますか、それともコンパイラが関数定義であると考えているためですか?

4

1 に答える 1

0

それはまさにそれであり、最も厄介な parseとして知られています。その理由は、A a1();がオブジェクト宣言として扱われると、そのプロトタイプで関数を宣言できなくなるからです。そして、関数を宣言できるようにしたいですよね?

B b1("Text");関数プロトタイプとして扱うことができないため機能しますが、たとえば、B b(A());can と will です。

于 2013-02-16T17:26:12.407 に答える