在模板化类的构造函数中调用构造函数
Calling a constructor inside a constructor of a templated 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()
做什么?
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
的默认构造函数(在我的示例中int
和std::string
(。
相关文章:
- 获取从C++中同一类中的构造函数调用的方法返回的值
- 从具有按值捕获的 lambda 移动构造 std::函数时,移动构造函数调用两次
- 确保所有构造函数调用相同的函数 c++ 设计模式
- 减少复制构造函数调用
- 使用回调函数从构造函数调用虚拟/派生方法的替代方法?
- 在 Google 测试中,我可以从构造函数调用 GetParam() 吗?
- C++ - 从另一个类构造函数调用类构造函数
- 在C++中初始化带有和不使用构造函数调用的对象有什么区别
- 是否可以从移动构造函数调用默认构造函数?
- 在模板生成器模式中分解重复的构造函数调用
- std::atexit 从全局对象的构造函数调用时的排序
- 对构造函数调用的约束
- 编译器错过了无效的构造函数调用,并调用不存在的(或私有的)默认构造函数
- 用构造函数调用填充向量
- 创建指针时是否没有构造函数调用
- 使用 emplace_back 避免移动构造函数调用的最佳方法?
- C++ 抽象类构造函数调用
- 为什么函数参数将带有参数的构造函数调用
- 为什么比“构造函数”调用更多的“解构器”调用
- 将对象传递给函数并不是导致构造函数调用