c++ - 是否有初始化列表的替代方法?

标签 c++ object constructor initialization initializer-list

我有类 SmallClassBigClassBigClass 作为私有(private)属性,它是 SmallClass 的一个对象。我读过有关初始化列表的内容,但问题是我无法预测需要传递给 SmallClass 的构造函数的值。代码看起来像这样:

class SmallClass {
  public:
    SmallClass(int);
  private:
    int boo;
}

SmallClass::SmallClass(int i) {
  boo = i;
}

class BigClass {
  public:
    BigClass();
  private:
    SmallClass sc; // I guess this calls the constructor (and does not compile)
};

BigClass::BigClass() {
  int foo;
  /* Do stuff. I end up with a "foo" having a non predictable value. */
  sc = SmallClass(foo); /* Is there a way to do something like this? */
}

最佳答案

Is there an alternative to initializer lists?

是的。默认成员初始化器是初始化器列表的替代方法。但是,这对您的情况没有用。事实上,它仅在构造函数的参数可预测时才有用。

foo 的“不可预测性”对于初始化程序 lits 来说不是问题;您不需要其他选择。只需调用一个函数:

int get_foo() {
    int foo;
    /* Do stuff. I end up with a "foo" having a non predictable value. */
    return foo;
}

BigClass::BigClass() : sc(get_foo()) {}

如果“do stuff” 包括对成员的访问(示例中没有其他成员,我认为这可能是一种简化),那么您可以使用成员函数来实现它。但是,请记住,您只能访问在 sc 之前初始化的成员。

关于c++ - 是否有初始化列表的替代方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49318777/

相关文章:

javascript - 使用 <object> 标签检测视频是否结束

java - 如何将对象添加到 JSONArray

c# - 对象传递回调用者/创建者后,(许多)一类属性丢失了吗?

c++ - 问题(链接、崩溃)

java - super 强大的 Android NDK : get positionPercent to update audio progress seekbar

c++ - 捕获不使用 try/catch 抛出的异常

c++ - 为什么获取成员函数指针值需要在类内部进行类名限定?

javascript - 如何本地存储包含 div 的变量并恢复它

javascript - prototype.constructor 和内置 Object() 有什么区别

c++ - 使用 Gmock 模拟参数化构造函数