Support for contract based programming in C++ 在Rapperswil的C ++ 20工作草案中被采用。此语言功能的一部分是违反处理程序的概念,当违反合同时将调用该概念。
您可以安装自己的违规处理程序并发布发布版本,并可以选择在运行时启用强制执行。
但是本文在[dcl.attr.contract]中添加的措词是:
程序的违规处理程序是类型为“
noexcept
opt 的函数 函数(对const std::contract_violation
的左值引用)返回void
”的函数,并以实现定义的方式指定。 [...]应该没有编程的方式来设置或修改违规处理程序。除以下指定的内容外,它是由实现定义的,如何为程序建立违反处理程序以及如何设置std::contract_violation
([support.contract.cviol])参数值。
这对我来说还不清楚。实现如何允许我以非编程方式设置自己的违规处理程序?我必须在gcc,clang和msvc上做什么?
答案 0 :(得分:2)
实现方式如何允许我以非编程方式设置自己的违规处理程序?
这是要由实现确定的,但是我相当怀疑这将是某种命令行参数。您将命名一个函数,编译器/链接器将使它成为违反处理程序。如果不是那样,那么他们可能会选择您实现的某些特定函数名称。
这里的要点是,从C ++抽象模型的角度来看,正在使用的函数是 static 。当编译器启动时,它确切地知道将调用哪个函数,就像系统对main
的调用,以及处理main
的返回值的程序部分一样。>