gpt4 book ai didi

c++ - 是否有计划将 "expects"添加到 std::optional?

转载 作者:太空狗 更新时间:2023-10-29 19:45:14 26 4
gpt4 key购买 nike

这个话题是有争议的,但我认为前提条件和类不变量应该受到断言的保护,断言会在违反相应软件组件的约定时终止程序——只要断言检查不是性能瓶颈。

我真的很喜欢可选类型并经常使用它们,但对我来说,std::optional 的标准库实现目前无法使用,因为第一个 the dereferencing of an optional does not perform checks whether it contains a value ,其次,截至目前,主要的 C++ 实现都不支持/实现标准库函数中的断言。

从我多年来看到的 std::optional 的使用来看,我不记得有一个 std::optional 以这样的方式和数量使用的实例,以至于前提条件检查将成为性能瓶颈并且令人望而却步.例如,我从未见过有人将蒙版图像实现为 std:optional 的数组。

我的问题:是否已经有任何提案(例如对于 c++22),其中添加了 contract features到标准库,特别是 std::optional?


是的,我知道 value由异常“保护”的方法。首先,我不太喜欢使用异常的非异常控制流(have you ever tried to debug such code)。其次,我认为一种类型的强度和安全性应该由其最薄弱的环节来判断。


我还不能发表评论,因此我对 Nicol Bolas 的回答发表评论这里:

感谢您的回答,但坦率地说,我认为它没有回答我的问题。只是为了澄清。我不是要求一项提案,该提案要求在违反契约(Contract)(“预期”关闭)时调用 std::abort。相反,我想问是否有任何计划在 P0788 提案之后将契约(Contract)注释添加到标准库中。我同意该标准不应强制规定具体实现应如何处理此类违反契约(Contract)的行为。

最佳答案

这在不久的将来还没有实际意义,因为契约已从 C++20 中删除以进行一些返工。但是,我认为剩余的文本仍然适用:

Is there any proposal out already (e.g. for c++22), which adds design by contract support to the standard library, in particular std::optional?

恰恰相反:proposal P0788被采用并folded into the C++20 working paper ,其中声明先决条件/后置条件必须由合约功能强制执行。 P0788 的具体目的是防止对实现使用合约来处理这些事情(或类似条件的概念)的形式化要求:

Let’s avoid any specification that demands any particular technology by which implementations must comply with Library specifications.

允许实现表达诸如契约(Contract)之类的条件,但不是必须的。通过采用 P0788,委员会实际上将此类事情视为实现质量问题,而不是正式规范。

C++ 不是一种安全的语言,合约也无意使其如此。违反契约(Contract)是编程错误并会产生 UB,这就是标准的看法。而且按照设计,您无法将对安全的渴望强加给那些不想要它的人。

关于c++ - 是否有计划将 "expects"添加到 std::optional?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57029600/

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