gpt4 book ai didi

c++ - 为契约(Contract)指定违规处理程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:42:26 24 4
gpt4 key购买 nike

Support for contract based programming in C++在 Rapperswil 的 C++20 工作草案中被采用。此语言功能的一部分是 违规处理程序 的概念,当违反契约(Contract)时将调用该处理程序。

Herb Sutter's trip report指出:

You get to install your own violation handler and ship a release build with the option of turning on enforcement at run time.

但是[dcl.attr.contract]中的措辞这篇论文补充说:

The violation handler of a program is a function of type “noexceptopt function of (lvalue reference to const std​::​contract_­violation) returning void”, and is specified in an implementation-defined manner. [...] There should be no programmatic way of setting or modifying the violation handler. It is implementation-defined how the violation handler is established for a program and how the std​::​contract_­violation ([support.contract.cviol]) argument value is set, except as specified below.

这个我不太清楚。实现如何允许我以非编程方式设置我自己的违规处理程序?我必须在 gcc、clang 和 msvc 上做什么?

最佳答案

How might an implementation allow me to set my own violation handler, in a non-programmatic way?

这是由实现来确定的,但我宁愿怀疑它是某种命令行参数。您命名一个函数,编译器/链接器会将其作为违规处理程序。如果不是那样,那么他们可能会选择您实现的一些特定函数名称。

这里的要点是,从 C++ 抽象模型的角度来看,所使用的函数是静态的。当编译器启动时,它确切地知道将调用哪个函数,很像系统对 main 的调用,以及处理 main 的程序部分' s 返回值。

关于c++ - 为契约(Contract)指定违规处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51145658/

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