此代码具有模板化的类。默认构造函数似乎以递归方式调用自身。它怎么做呢?我不懂这段代码。也许如果给我一个没有模板的示例,只是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()
是做什么的?
答案 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
的默认构造函数(在我的示例中为int
和std::string
)。
答案 1 :(得分:0)
简单类具有类型为value
(模板化)的变量T
。
您指向的构造函数是默认的构造函数。创建Simple
对象时未提供参数时。然后默认构造函数会将值对象实例化为T的默认构造函数。
Simple(T value = T())
都是默认构造函数,它实例化类型化元素的默认构造函数的值。
示例:- 如果T是String。
Simple (String value = String())
因此现在将值初始化为String()的默认值。