在模板化 class 的构造函数中调用构造函数

Calling a constructor inside a constructor of a templated class

此代码具有模板化 class。默认构造函数似乎以递归方式调用自身。它怎么做到的?我不明白这段代码。也许如果给我一个没有模板的例子,只有 POD 类型,事情会更清楚。我以前在 C++ 编程中没有遇到过这种结构。我认为我不了解构造函数和模板。

template <typename T>
class Simple {
  public:
    Simple(T value = T());    // What's this?
    T value();
    void set_value(T value);
  private:
    T value_;
};

template<typename T>
Simple<T>::Simple(T value) {
  value_ = value;
}

template<typename T>
T Simple<T>::value() {
  return value_;
}

template<typename T>
void Simple<T>::set_value(T value) {
  value_ = value;
}

我的问题是: T value = T() 是做什么的?

只是一个默认值void foo(int i = 42);,没有递归。

foo(); 等同于 foo(42);.

同理,用Simple(T value = T());

Simple<int> s{}; 等同于 Simple<int> s{0}; 并且 Simple<std::string> s{}; 等同于 Simple<std::string> s{std::string{}};(空字符串)。

T() 将调用给定 T 的默认构造函数(在我的示例中为 intstd::string)。

Class Simple 有一个 value 类型的变量 T(模板化)。

您指向的构造函数是默认构造函数。创建 Simple 对象时未提供任何参数。然后默认构造函数将值对象实例化为T的默认构造函数。

其中之一,Simple(T value = T()) 是一个默认构造函数,它将值实例化为类型化元素的默认构造函数。

示例:- 如果 T 是字符串。

Simple (String value = String()) 

因此值现在被初始化为 String() 的默认值。