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

Calling a constructor inside a constructor of a templated class

本文关键字:构造函数 调用      更新时间:2023-10-16

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

class Simple 具有类型为T(模板化(的变量value

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

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

例:- 如果 T 是字符串。

Simple (String value = String()) 

所以值现在初始化为默认值 String((。

它只是一个默认值,因为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(。