gpt4 book ai didi

c++ - MSVC SAL 与 C++2a 契约

转载 作者:太空狗 更新时间:2023-10-29 20:50:35 25 4
gpt4 key购买 nike

在 MSVC 中,有 SAL feature , 可以用来描述参数、结果等,效果很好,可移植性也很好,C++2a Contract feature 好像做同样的事情,谁能说说它们之间的区别?

最佳答案

SAL 和契约(Contract)之间没有真正的重叠。 SAL 是关于注释参数和返回值,以描述函数如何使用它们的某些方面。关于描述函数需要其参数以及调用者可以期望的返回值的契约。这些听起来很相似,但它们非常不同。

例如,SAL 具有参数是输入、输出还是输入/输出参数的概念。这是函数对参数执行的操作的问题。合约没有这样的概念,因为它们不关心函数对参数做了什么。

现在有一些重叠。有时,一个函数期望什么和一个函数确实对齐。例如,如果函数期望指针参数不是 nullptr,您可以将 [[pre: param != nullptr]] 契约(Contract)应用于该函数。但是,_In_ 指针参数注释的 SAL 概念涵盖了相同的一般思想:如果函数使用参数作为指向对象的有效指针,那么它自然不能是 nullptr .所以 _In_ 可以防止这种情况发生。

SAL 最终是关于描述函数如何使用数据;契约是关于函数与调用代码的接口(interface)

此外,SAL 可以表达的内容非常有限。它有一些复杂的语句,例如“是一个以 null 结尾的字符串”,但它没有您可以构建自己的语句的基础。契约是 C++ 表达式,因此它们可以验证 C++ 表达式可以验证的任何内容

关于c++ - MSVC SAL 与 C++2a 契约,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53790941/

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