如果我想从类型"T"定义元素的容器(来自 STL),那么"T"必须使用默认构造函数?
If I want to define a container (from the STL) of elements from a type "T" so "T" must a default constructor?
我读到,如果我想从类型T
定义元素数组,那么class T
必须是默认的c'tor(这是正确的,是吗?(。
但是(从STL(定义T
类型的元素的容器呢?
在这两种情况下都不需要默认构造函数。
#include <iostream>
#include <vector>
struct A
{
int x;
A(int x) : x(x) {}
};
int main()
{
A arr[3] {A(0), A(1), A(2)}; // An array
std::vector<A> vec; // A std container
vec.push_back(A(0));
vec.push_back(A(1));
vec.push_back(A(2));
}
不过,对于某些容器,缺少默认构造函数会禁用某些操作,如std::map
和std::unordered_map
中的operator[]
。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 如何使用默认参数等选择模板专业化
- 具有默认模板参数的多态类的模板推导失败
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 初始化具有非默认构造函数的std::数组项的更好方法
- 何时提供默认参数作为模板参数
- 是默认情况下分配给char数组常量的值
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 具有默认值的引用获取函数
- 具有默认模板类型的默认构造函数的类型推导
- 如果"new int"返回"int*",那么为什么"new int[n]"不返回"int**"?
- 当给定默认值时,为什么此模板参数推导失败
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?
- 在c++中,如果首先禁止默认构造,那么禁止复制构造有意义吗
- 如果我想从类型"T"定义元素的容器(来自 STL),那么"T"必须使用默认构造函数?
- 如果我们在c++中重载构造函数,那么默认构造函数是否仍然存在
- 如果对象没有默认构造函数,并且不允许在其类定义中创建一个,那么如何将对象放入节点中?
- 如果一个类继承自纯基类,那么默认析构函数是什么?