c++ - 在 std::Optional 的 noexcept 说明符中引用initializer_list

标签 c++ option-type initializer-list libstdc++ noexcept

我对此有疑问code :

    explicit constexpr
    optional(in_place_t, initializer_list<_Up> __il, _Args&&... __args)
    noexcept(is_nothrow_constructible_v<_Tp, initializer_list<_Up>&,
                        _Args...>)
    : _Base(std::in_place, __il, std::forward<_Args>(__args)...) { }

为什么这里使用引用文献?初始值设定项列表作为值传递给 std::Optional。我想这可能与它在这种情况下是命名参数这一事实有关,但我不确定。

最佳答案

当您使用is_nothrow_constructible时和各种其他类型特征,有一个约定,即左值引用类型 T&表示“类型 T 的左值”,而非引用类型 T表示“T 类型的右值”。在本例中,正在进行测试以查看 _Tp 是否有效。假设第一个参数是 initializer_list<_Up> 类型的左值,则抛出无法构造。 .

关于c++ - 在 std::Optional 的 noexcept 说明符中引用initializer_list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69886814/

相关文章:

swift - 为什么我不能调用 map<U>(_ transform : (Wrapped) -> U) -> U? 并同时使用可选链接?

ios - Swift Closure 中的可选链接,其中返回类型必须为 Void

c++ - 使用空大括号初始化程序 : pointer or reference? 的重载分辨率

c++ - 基于范围的隐式添加 `const` 限定符?

c++ - 当涉及分配器时,是否有类似于 copy-and-swap 习惯用法的东西?

c++ - 我在计算 4 个值的方差时的错误在哪里?

c++ - 帮助在 Visual C++ Express 中进行链接

c++ - 如果对可推导类型进行替换,可变参数模板类型推导会使编译器崩溃

ios - 使用 'if let' 在 swift 'where' 中仅处理其他条件

c++ - 什么语言规则允许 C++11 推断这是一个 initializer_list 对?