为合约指定冲突处理程序
Specifying a violation handler for contracts
支持C++中基于契约的编程 在拉珀斯维尔通过了 C++20 工作草案。此语言功能的一部分是违规处理程序的概念,当违反合同时将调用该处理程序。
赫伯·萨特(Herb Sutter(的旅行报告指出:
您可以安装自己的违规处理程序并发布发布版本,并可以选择在运行时启用强制实施。
但是本文在[dcl.attr.contract]中添加的措辞是:
程序的违规处理程序是类型为"
noexcept
opt函数(左值引用const std::contract_violation
(返回void
",并以实现定义的方式指定。[...]不应有设置或修改冲突处理程序的编程方法。它是实现定义的,如何为程序建立违规处理程序以及如何设置std::contract_violation
([support.contract.cviol]( 参数值,除非下面指定。
这对我来说非常不清楚。实现如何允许我以非编程方式设置自己的违规处理程序?我需要在 gcc、clang 和 msvc 上做什么?
实现如何允许我以非编程方式设置自己的违规处理程序?
这是由实现确定的,但我宁愿怀疑它会是某种命令行参数。您将命名一个函数,编译器/链接器会将其作为冲突处理程序。如果不是这样,那么他们可能会选择您实现的一些特定函数名称。
这里的要点是,从C++抽象模型的角度来看,正在使用的函数是静态的。当编译器启动时,它确切地知道将调用哪个函数,就像系统调用main
,以及处理程序处理main
返回值的部分。
相关文章:
- 如何处理冲突的函数和变量名称?
- 为合约指定冲突处理程序
- 0x0F50DF58:0xC0000005:访问冲突读取位置0x0047CA04时未处理的异常
- 引发未经处理的异常:写入访问冲突. bunnies_array 0x5CB3CBA
- 引发未经处理的异常:简单 C++ 程序中的读取访问冲突,动态增加数组长度以存储数字
- 错误 : 异常 : 引发未处理的异常: 读取访问冲突.0xDDDDDDDD临时温度
- 如何处理标头名称与标准库标头冲突,但不更改文件名?
- 是否有具有用户定义的冲突处理程序的 std::唯一样式库算法
- 实验室中0x6BE20E11 (ucrtbased.dll) 的未处理异常.exe: 0xC0000005:访问冲突读取
- 接收不一致的访问冲突,处理队列
- 引发未经处理的异常:读取访问冲突。这>字符串被0x1C6F112
- 视觉C++ Battle4锡安项目 引发未处理的异常:读取访问冲突.**这**是空的.发生
- 如何修复<程序名称>中的"<内存位置>未处理的异常。Visual Studio 2017 中的访问冲突写入位置<内存位置>"
- ***读取位置*******的访问冲突处出现未处理的异常
- 未处理的异常..访问冲突写入位置
- 在 DirectXGame.exe 中0x00B84CD6出现未经处理的异常:0xC0000005:访问冲突读取位置0x
- 存储类对象的C++模板链表-未处理的异常访问冲突读取位置
- 并行处理冲突对
- 哈希表中的冲突处理
- C++unordered_map冲突处理,调整大小和重新散列