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;
    }