为什么unique_ptr operator*不是noexcept?

Tha*_*mer 9 c++ unique-ptr dereference noexcept

在为我的爱好操作系统实现一个基本的std库时,我遇到了这个并想知道为什么:

双方operator->()T* get()标记为noexcept,但operator*()并非如此.根据参考,它应该相当于*get(),它将允许它noexcept并且看一些实现我认为没有理由不是.

为什么unique_ptr解除引用运算符没有标记为noexcept

Sto*_*ica 8

因为operator*对于可能抛出的pointer类型std::unique_ptr.该pointer类型别名定义为:

std::remove_reference<Deleter>::type::pointer如果存在该类型,否则T*.必须满足NullablePointer

这可能是其他的东西T*,它可能是一个超载的类类型operator*.


Jar*_*d42 6

来自cppreference

  • typename std::add_lvalue_reference<T>::type operator*() const; (1)(自C++ 11以来)
  • pointer operator->() const noexcept; (2)(自C++ 11起)

然后:

例外:
1)可能抛出,例如,如果pointer定义投掷operator*

  • @ArneVogel - 见[LWG Issue 2762](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#2762). (2认同)