我对此有疑问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/