隐含默认可建构意义
Implicitly default-constructible meaning?
本文关键字:默认 更新时间:2023-10-16
在std::tuple
的这个引用页面上,据说该类型的默认构造函数是"显式当且仅当Ti
对于至少一个i
不是隐式默认可构造的"。
我有点搞不清"隐式默认可构造"是什么意思。有人能给我举个例子吗?
这里有一个例子:
struct A {};
struct B { explicit B() = default; };
int main()
{
A a1 = {};
A a2 {};
// B b1 = {}; // Error, would use explicit default constructor
B b2 {};
}
由于列表初始化,自C++11以来,具有explicit
的构造函数变得更加相关。
这意味着,要隐式默认构造std::tuple<T1,T2,...,Tn>
,所有Ti
类型都必须。
隐式默认可构造元组的示例
例如,由于std::string
和std::vector
是隐式默认可构造的(它们的默认构造函数不是explicit
),因此std::tuple<std::string, std::vector>
是:
void f(std::tuple<std::string, std::vector<int>>);
f({}); // valid and equivalent to:
std::string sempty;
std::vector<int> vempty;
auto tsv = std::make_tuple(sempty, vempty);
f(tsv);
非隐式默认可构造元组的示例
对于非隐式默认可构造类型A
,std::tuple<std::string, A>
不能隐式默认构造:
struct A
{
explicit A() = default;
};
void f(std::tuple<std::string, A>);
f({}); // error
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 如何使用默认参数等选择模板专业化
- 具有默认模板参数的多态类的模板推导失败
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 初始化具有非默认构造函数的std::数组项的更好方法
- 何时提供默认参数作为模板参数
- 是默认情况下分配给char数组常量的值
- 具有默认值的引用获取函数
- 具有默认模板类型的默认构造函数的类型推导
- 当给定默认值时,为什么此模板参数推导失败
- 修改 VS Code 中的默认C++代码段
- 声明默认的模板化函数
- 将const引用参数初始化为默认参数会导致悬空引用吗
- 如何使用非默认构造函数实例化模板化类
- 如何修复带有 clang 的参数'args'缺少默认参数的问题?
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 为什么大多数 pair 实现默认不使用压缩(空基优化)?
- 格式化浮点值:返回默认值
- 对于MacOS上的G++,如何添加默认的include目录/usr/local/include和默认的库搜索路径/usr