【问题标题】:Instance of class and function return type confusion [duplicate]类和函数返回类型混淆的实例[重复]
【发布时间】:2013-02-16 17:24:20
【问题描述】:

我不能这样做:

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省略括号,或者是因为编译器认为它是一个函数定义的原因?

【问题讨论】:

  • 这被称为最令人头疼的解析,它已经在 Stack Overflow 上得到很好的介绍。请查看链接的副本以及右侧的“相关”侧边栏。

标签: c++ class function-prototypes


【解决方案1】:

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

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

【讨论】:

  • 这不是一个令人烦恼的解析,但不是令人烦恼的吗?
  • +1 我通常不会对明显重复的答案投赞成票,但您的第一段很好:)
  • @LightnessRacesinOrbit 它没有被制定为大多数,这就是我回答的原因(我最近一直在铺设明显的那些)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-07
  • 1970-01-01
  • 2020-07-24
  • 2014-04-03
  • 2019-10-17
  • 1970-01-01
  • 2015-07-01
相关资源
最近更新 更多