在 std::optional 的 noexcept 说明符中引用 initializer_list
Reference to initializer_list in noexcept specifier of std::optional
我对此有疑问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>
.[=17 类型的 lvalue =]
我对此有疑问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>
.[=17 类型的 lvalue =]