- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这个话题是有争议的,但我认为前提条件和类不变量应该受到断言的保护,断言会在违反相应软件组件的约定时终止程序——只要断言检查不是性能瓶颈。
我真的很喜欢可选类型并经常使用它们,但对我来说,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/
我创建了一个用户可以添加测试的字段。这一切运行顺利我只希望当用户点击(添加另一个测试)然后上一个(添加另一个测试)删除并且这个显示在新字段中。 所有运行良好的唯一问题是点击(添加另一个字段)之前添加另
String[] option = {"Adlawan", "Angeles", "Arreza", "Benenoso", "Bermas", "Brebant
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在努力将 jQuery 滚动功能添加到 nav-tab (Bootstrap 3)。我希望用户能够选择他们想要的选项卡,并在选项卡内容中有一个可以平滑滚动到 anchor 的链接。这是我的代码,可
我正在尝试在用户登录后再添加 2 个 ui 选项卡。首先,我尝试做一个之后。 $('#slideshow').tabs('remove', '4'); $("#slideshow ul li:last
我有一个包含选择元素的表单,我想通过选择添加和删除其中一些元素。这是html代码(这里也有jsfiddle http://jsfiddle.net/txhajy2w/):
正在写这个: view.backgroundColor = UIColor.white.withAlphaComponent(0.9) 等同于: view.backgroundColor = UICo
好的,如果其中有任何信息,我想将这些列添加到一起。所以说我有 账户 1 2 3 . 有 4 个帐户空间,但只有 3 个帐户。我如何创建 java 脚本来添加它。 最佳答案 Live Example H
我想知道是否有一种有效的预制算法来确定一组数字的和/差是否可以等于不同的数字。示例: 5、8、10、2,使用 + 或 - 等于 9。5 - 8 = -3 + 10 = 7 + 2 = 9 如果有一个预
我似乎有一个卡住的 git repo。它卡在所有基本的添加、提交命令上,git push 返回所有内容为最新的。 从其他帖子我已经完成了 git gc 和 git fsck/ 我认为基本的调试步骤是
我的 Oracle SQL 查询如下- Q1- select hca.account_number, hca.attribute3, SUM(rcl.extended_amou
我正在阅读 http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingG
我正在尝试添加一个“加载更多”按钮并限制下面的结果,这样投资组合页面中就不会同时加载 1000 个内容,如下所示:http://typesetdesign.com/portfolio/ 我对 PHP
我遇到这个问题,我添加了 8 个文本框,它工作正常,但是当我添加更多文本框(如 16 个文本框)时,它不会添加最后一个文本框。有人遇到过这个问题吗?提前致谢。 Live Link: JAVASCRIP
add/remove clone first row default not delete 添加/删除克隆第一行默认不删除&并获取正确的SrNo(例如:添加3行并在看到问题后删除SrNo.2)
我编码this ,但删除按钮不起作用。我在控制台中没有任何错误.. var counter = 0; var dataList = document.getElementById('materi
我有一个类似数组的对象: [1:数组[10]、2:数组[2]、3:数组[2]、4:数组[2]、5:数组[3]、6:数组[1]] 我正在尝试删除前两个元素,执行一些操作,然后将它们再次插入到同一位置。
使用的 Delphi 版本:2007 你好, 我有一个 Tecord 数组 TInfo = Record Name : String; Price : Integer; end; var Info
我使用了基本的 gridster 代码,然后我声明了通过按钮添加和删除小部件的函数它工作正常但是当我将调整大小功能添加到上面的代码中时,它都不起作用(我的意思是调整大小,添加和删除小部件) 我的js代
title 323 323 323 title 323 323 323 title 323 323 323 JS $(document).keydown(function(e){
我是一名优秀的程序员,十分优秀!