C++ boost::empty\u init\t用于什么?
我正在阅读C++ boost::empty\u init\t用于什么?,c++,boost,C++,Boost,我正在阅读boost::empty\u value,不理解boost::empty\u init\t的用法。在empty_值专用模板代码中(我删除了一些不活动的\ifdefine块): 另一个问题是:typedef T类型是什么for?标签boost::empty\u init\t允许您区分 T value; // default initialization 及 这两种类型的初始化通常在单个构造函数中执行不同的操作 template<class... Args> expli
boost::empty\u value
,不理解boost::empty\u init\t
的用法。在empty_值
专用模板代码中(我删除了一些不活动的\ifdefine
块):
另一个问题是:
typedef T类型是什么
for?标签boost::empty\u init\t
允许您区分
T value; // default initialization
及
这两种类型的初始化通常在单个构造函数中执行不同的操作
template<class... Args>
explicit empty_value(Args&&... args)
: T(std::forward<Args>(args)...) {}
然后empty_value()
将使T.i
未初始化,而empty_value(boost::empty_init_T)
将T.i
初始化为零。看这个简单
什么是typedef T类型代码>用于
简化从空值
类型本身提取基础类型。使用此别名,您只需编写typename Empty\u value\u type::type
即可获得T
。这在通用代码中很有用:
template<class Empty_value_type>
void foo(Empty_value_type) {
using my_type = typename Empty_value_type::type;
}
模板
void foo(空值类型){
使用my_type=typename空值_type::type;
}
标签boost::empty\u init\t
允许您区分
T value; // default initialization
及
这两种类型的初始化通常在单个构造函数中执行不同的操作
template<class... Args>
explicit empty_value(Args&&... args)
: T(std::forward<Args>(args)...) {}
然后empty_value()
将使T.i
未初始化,而empty_value(boost::empty_init_T)
将T.i
初始化为零。看这个简单
什么是typedef T类型代码>用于
简化从空值
类型本身提取基础类型。使用此别名,您只需编写typename Empty\u value\u type::type
即可获得T
。这在通用代码中很有用:
template<class Empty_value_type>
void foo(Empty_value_type) {
using my_type = typename Empty_value_type::type;
}
模板
void foo(空值类型){
使用my_type=typename空值_type::type;
}
我还给作者格伦·费尔南德斯(Glen Fernandes)写了一封电子邮件,以下是他的回复。希望它能帮助其他人:
现在只有2名施工人员记录在案:
empty_value()=默认值代码>
template empty_值(empty_init_t,Args&&…Args)代码>
最后一个是不够的,因为第一个做了一些事情
不一样。它执行默认初始化,而最后一个初始化
执行值初始化
i、 e.这是以下两者之间的区别:
new(存储)T代码>
new(存储)T()代码>
例如,基元类型的默认初始化意味着do
没有什么。原语类型的值初始化意味着初始化为
零
<> >考虑<代码> EvyTyLyValue/COD> >代码>结构{INTA[10000;};<代码>
这里构造函数1不起作用。但是构造函数2将初始化
所有10000个整数都归零(这很昂贵,因此用户可能会
我想选择退出)
“type”typedef只是我在使用时发现的一些有用的东西
had:typedef空值基代码>
i、 e.将“复杂类型表达式”
作为base::type
轻松获取
而不是重复
希望这能有所帮助。我也给作者格伦·费尔南德斯写了一封电子邮件,以下是他的回复。希望它能帮助其他人:
现在只有2名施工人员记录在案:
empty_value()=默认值代码>
template empty_值(empty_init_t,Args&&…Args)代码>
最后一个是不够的,因为第一个做了一些事情
不一样。它执行默认初始化,而最后一个初始化
执行值初始化
i、 e.这是以下两者之间的区别:
new(存储)T代码>
new(存储)T()代码>
例如,基元类型的默认初始化意味着do
没有什么。原语类型的值初始化意味着初始化为
零
<> >考虑<代码> EvyTyLyValue/COD> >代码>结构{INTA[10000;};<代码>
这里构造函数1不起作用。但是构造函数2将初始化
所有10000个整数都归零(这很昂贵,因此用户可能会
我想选择退出)
“type”typedef只是我在使用时发现的一些有用的东西
had:typedef空值基代码>
i、 e.将“复杂类型表达式”
作为base::type
轻松获取
而不是重复
希望这有帮助
struct T {
int i;
}
template<class Empty_value_type>
void foo(Empty_value_type) {
using my_type = typename Empty_value_type::type;
}