在模板化类的构造函数内调用构造函数

时间:2018-10-09 22:53:39

标签: c++ templates generic-programming default-constructor

此代码具有模板化的类。默认构造函数似乎以递归方式调用自身。它怎么做呢?我不懂这段代码。也许如果给我一个没有模板的示例,只是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()是做什么的?

2 个答案:

答案 0 :(得分:0)

它只是默认值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)。

答案 1 :(得分:0)

简单类具有类型为value(模板化)的变量T

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

Simple(T value = T())都是默认构造函数,它实例化类型化元素的默认构造函数的值。

示例:- 如果T是String。

Simple (String value = String()) 

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