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