调用不带参数的构造函数有效,使用参数则无效。为什么?

Calling a constructor with no parameters works, with a parameter doesn't. Why?

本文关键字:参数 无效 为什么 构造函数 有效 调用      更新时间:2023-10-16

我有一个定义如下的类:

class Foo {
  private:
    boolean feature;
  public:
    Foo(boolean feature) : feature(feature) {}
  // ...
};

我正在尝试构造一个实例,作为另一个类的私有属性:

class Bar {
  private:
    Foo foo(true);
    // ...
  };

这行不通。我expected identifier before numeric constant与声明保持一致。当我简单地从Foo的构造函数定义中删除参数并要求Foo foo;时,它可以工作。

为什么?

如何定义和声明采用布尔参数的Foo实例?

不能在类成员声明中使用该初始化语法;只能使用 {}= 初始化成员。以下方法应该有效(假设支持 C++11 或更高版本):

Foo foo{true};
Foo foo = Foo(true);

C++11 之前的方法是:

class Bar {
  public:
    Bar() : foo(true){} //initialization
  private:
    Foo foo; //no parameter
};

奖金:

class Bar {
  private:
    Foo foo(); //<- This is a function declaration for a function
               //named foo that takes no parameters returning a Foo.
               //There is no Foo object declared here!
};