我觉得阻止std::reference_wrapper<T>
作为默认构造使得它更难使用,即使使用默认构造的reference_wrapper会导致运行时异常。
但是,reference_wrapper
完全可以复制,因此它的值总是可以更改,那么为什么要阻止它默认 null引用呢?它使许多用例更简单,使用它,不再需要建议的observer_ptr
- 为什么需要冗余?默认的可构造reference_wrapper
将统治它们所有人!
思想?
答案 0 :(得分:9)
但是,reference_wrapper是完全可复制的,因此它的值总是可以更改,那么为什么要阻止它默认使用null引用呢?
std::reference_wrapper
有一个 null 值是什么意思?如果您需要一个空值,只需使用指针:P
std::reference_wrapper
被构建为引用的包装器,就是这样。它必须像引用一样,否则它不会是包装器而是其他东西。有一些用例,如果你允许它的默认值,它可能会破坏。如果您需要 null 值,请使用其他内容,例如指针,或者使用引用的限制。
另外,你自己陈述一个理由:
[...]即使使用默认构造的reference_wrapper也会导致运行时异常。
什么是没有提及的意义?拥有std::reference_wrapper
意味着它引用了某些内容,就像引用一样。每次使用引用来查看它是否为空时,添加空值只意味着附加代码。
它使许多用例更加简单[...]
是的,也许吧。但它会使其他用例更加困难。您需要检查包装器是否有效,不要忘记在用作具有默认构造函数的成员时进行初始化,等等。
简而言之,std::reference_wrapper
只是引用的包装器,因此不能只是一个简单的引用。一切都有优势和劣势,在这里,你可能需要std::observer_ptr
,但在其他情况下,你不需要做任何检查。