gpt4 book ai didi

c++ - boost::empty_init_t的作用是什么?

转载 作者:行者123 更新时间:2023-12-02 09:53:12 42 4
gpt4 key购买 nike

我正在阅读boost::empty_value source code,但不了解boost::empty_init_t的用法。在empty_value专用模板代码中(我删除了一些无效的#ifdefine块):

template<class T, unsigned N>class empty_value<T, N, true>    : T {public:    typedef T type;    empty_value() = default;    empty_value(boost::empty_init_t)        : T() { }    template<class... Args>    explicit empty_value(boost::empty_init_t, Args&&... args)        : T(std::forward<Args>(args)...) { }    const T& get() const BOOST_NOEXCEPT {        return *this;    }    T& get() BOOST_NOEXCEPT {        return *this;    }};

Would not one constructor like the following be enough?:

template<class... Args>
explicit empty_value(Args&&... args)
: T(std::forward<Args>(args)...) { }
为什么 empty_value实现需要另外两个构造函数?
empty_value() = default;

empty_value(boost::empty_init_t)
: T() { }
另一个问题是: typedef T type;是做什么用的?

最佳答案

我还给作者Glen Fernandes写了一封电子邮件,这是他的回复。希望它可以帮助其他人:

现在仅记录了2个构造函数:
https://www.boost.org/doc/libs/master/libs/core/doc/html/core/empty_value.html

  • empty_value() = default;
  • template<class... Args> empty_value(empty_init_t, Args&&... args);

  • 最后一个是不够的,因为第一个做某事
    不同。它执行默认初始化,而最后一个
    执行值初始化。
    即,两者之间的区别是:
  • new(storage) T;
  • new(storage) T();

  • 例如,原始类型的默认初始化意味着
    没有。原始类型的值初始化意味着初始化为
    零。
    例如考虑 empty_value<S>,其中 struct S { int a[10000]; };在这里,构造函数1不起作用。但是构造函数2将初始化
    所有10,000个整数都归零(这很昂贵,因此用户可能
    想要退出)。
    'type'typedef只是我发现几次有用的东西
    拥有: typedef empty_value<'complex type expression'> base;即为了轻松地将 'complex type expression'作为 base::type而不是
    而不是重复。
    希望这可以帮助。

    关于c++ - boost::empty_init_t的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62632008/

    42 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com