gpt4 book ai didi

c++ - 为什么 not_null 还没有进入 C++ 标准?

转载 作者:行者123 更新时间:2023-12-05 00:42:45 25 4
gpt4 key购买 nike

添加评论后"// not null"第 N 次指向原始指针 我再次想知道 not_null 发生了什么模板。

C++ core guidelines是很久以前创建的,并且一些内容已纳入标准,例如 std::span (有些像 string_viewstd::array 起源于核心指南本身之前,但有时会被混为一谈)。考虑到它的相对简单性,为什么 not_null(或类似的东西)还没有成为标准?

我定期扫描 ISO 邮件(但可能不彻底),我什至不知道有什么建议。


可能会回答我自己的问题。我不记得遇到过任何可以防止我编写的代码中出现错误的情况,因为我们尽量不以这种方式编写代码。

指南本身非常流行,例如,使其成为 clang-tidy 和 sonar。支持库似乎不太受欢迎。

例如 boost 从一开始就在 Linux 上作为一个包提供。我不知道 GSL 的任何实现。不过,我认为它与 Windows 上的 Visual C++ 捆绑在一起。


因为人们在评论中问过。

我自己会用它来记录意图。像 not_null<> 这样的构造可能具有注释没有的语义值(value)。尽管我可以看到它的位置,但执行它是次要的。这最好在零开销的情况下完成(也许在编译时仅适用于有限数量的情况)。

我主要考虑的是原始指针成员变量的情况。我忘记了将指针传递给函数的情况,我总是使用引用来表示非空,也表示“我没有获得所有权”。

同样(对于类(class)成员)我们也可以记录所有权owned<> not_owned<> .

我想还有关联的对象是否允许被改变。不过,这可能太高了。您可以使用引用成员而不是指针来记录这一点。我自己避免引用成员,因为我几乎总是想要可复制和可分配的类型。但是,参见示例 Should I prefer pointers or references in member data?对此进行一些讨论。

另一个维度是另一个实体是否可以修改变量。“const”表示我保证不会修改它。在多线程代码中,我们想说的几乎相反。那就是“其他代码 promise 在我们使用它时不会修改它”(没有显式锁定)但这是题外话......

最佳答案

有一个很大的技术问题可能无法解决,这使得标准化 not_null一个问题:它不能与只移动的智能指针一起工作。

not_null 最重要的用例与智能指针一起使用(对于原始指针,引用通常就足够了,但即便如此,有时引用也不起作用)。 not_null<shared_ptr<T>>是一个有用的东西,它说明了使用此类对象的 API 的一些重要内容。

但是not_null<unique_ptr<T>>不起作用。它无法工作。原因是从唯一指针移动会使旧对象为空。这正是 not_null预计会阻止。因此,not_null<T>总是在其包含的 T 上强制复制.哪个...你不能用 unique_ptr ,因为这是类型的全部意义所在。

可以说unqiue_ptr API 使用的不是 null 是好的和有用的。但你实际上不能用 not_null ,这给它的实用性带来了一个漏洞。

只要只移动智能指针不能与 not_null 一起使用, 标准化类变得有问题。

关于c++ - 为什么 not_null 还没有进入 C++ 标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72144761/

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