gpt4 book ai didi

c++ - 为什么 std::reference_wrapper 不是默认可构造的?

转载 作者:可可西里 更新时间:2023-11-01 17:40:01 66 4
gpt4 key购买 nike

我觉得防止std::reference_wrapper<T>默认构造使其更难使用,即使使用默认构造的 reference_wrapper 会导致运行时异常。

然而,一个reference_wrapper是完全可复制的,因此它的值始终可以更改,那么为什么要阻止它默认具有 the 空引用?它使许多用例变得更加简单,并且有了它,建议的 observer_ptr不再需要 - 为什么需要冗余?默认构造 reference_wrapper会统治他们!

想法?

最佳答案

However, a reference_wrapper is perfectly copyable, so it's value can always be changed, so why preventing it to have the null reference by default?

std::reference_wrapper 有一个 null 值有什么意义?如果你需要一个空值,只需使用一个指针 :P

std::reference_wrapper 被构建为引用的包装器,仅此而已。它的行为必须像引用一样,否则它就不是包装器而是其他东西。它有一些用例,如果您允许它的默认值,它可能会中断。如果您需要一个 null 值,要么使用其他东西,例如指针,要么忍受引用的限制。

另外,你自己说个理由:

[...] even though using a default constructed reference_wrapper causes a runtime exception.

空引用有什么意义?拥有一个 std::reference_wrapper 意味着它引用了某物,就像引用一样。添加空值意味着每次使用引用查看它是否为空时都会有额外的代码。

It makes many usage cases much simpler [...]

是的,也许吧。但这会使其他用例变得更加困难。您需要检查包装器是否有效,当用作具有默认构造函数的成员时不要忘记初始化它,等等。

简而言之,std::reference_wrapper 只是引用的包装器,因此除了普通引用之外不能作为其他东西。凡事有利有弊,在这里,你可能需要std::observer_ptr,但在其他情况下,你不需要做任何检查。

关于c++ - 为什么 std::reference_wrapper 不是默认可构造的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41541593/

66 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com