gpt4 book ai didi

c++ - 带有 initializer_list 的可选构造函数

转载 作者:太空宇宙 更新时间:2023-11-04 13:09:39 25 4
gpt4 key购买 nike

这个采用初始化列表的特殊构造函数的目的是什么。有人可以举例说明这何时有用吗?

template <class U, class... Args>
constexpr explicit optional(in_place_t, initializer_list<U> il, Args&&... args);

上面的和这个有什么不同?

template <class... Args> 
constexpr explicit optional(in_place_t, Args&&... args);

引用:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3793.html#optional.object.ctor

附言不确定是使用 c++14 还是 c++1z 标签。我认为应该有 c++ 技术规范的标签

最佳答案

使用两个独立构造函数的原因是允许构造将 initializer_list 作为其构造函数参数(可选地后跟任意参数列表)的对象。假设你有一个看起来像这样的 foo 类型:

struct foo
{
foo(std::initializer_list<int>) {}
};

在没有构造函数的情况下

template <class U, class... Args>
constexpr explicit optional(in_place_t, initializer_list<U> il, Args&&... args);

你不能构造一个optional as

optional<foo> o(in_place, {1, 2, 3});

上面的失败是因为 braced-init-list 没有类型,所以模板参数推导失败。你必须求助于这样的事情:

auto il = {1, 2, 3};
optional<foo> o(in_place, il);

拥有接受 initializer_list 参数的构造函数允许在构造 optional 对象时使用更自然的语法。

这是一个 minimal example展示了这两个构造函数的实用性。

关于c++ - 带有 initializer_list 的可选构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40503406/

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