在模板化 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
的默认构造函数(在我的示例中为 int
和 std::string
)。
Class Simple 有一个 value
类型的变量 T
(模板化)。
您指向的构造函数是默认构造函数。创建 Simple
对象时未提供任何参数。然后默认构造函数将值对象实例化为T的默认构造函数。
其中之一,Simple(T value = T())
是一个默认构造函数,它将值实例化为类型化元素的默认构造函数。
示例:-
如果 T 是字符串。
Simple (String value = String())
因此值现在被初始化为 String() 的默认值。
此代码具有模板化 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
的默认构造函数(在我的示例中为 int
和 std::string
)。
Class Simple 有一个 value
类型的变量 T
(模板化)。
您指向的构造函数是默认构造函数。创建 Simple
对象时未提供任何参数。然后默认构造函数将值对象实例化为T的默认构造函数。
其中之一,Simple(T value = T())
是一个默认构造函数,它将值实例化为类型化元素的默认构造函数。
示例:- 如果 T 是字符串。
Simple (String value = String())
因此值现在被初始化为 String() 的默认值。