如何使用 C++ Expects 运算符?
How to use C++ Expects operator?
我正在开始一个使用 C++ 的项目,我以前没有在少数学校项目之外使用过它 - 远不及我现在正在处理的范围。
我的目标是尽最大努力遵循 C++ Core Guidelines 工作以避免错误、提高性能,最重要的是:提高代码的可维护性。
我已经 运行 遇到了 数百个 的问题,从我的 g++ / Clang++ 版本不正确到找不到标准库,再到 g++ 使用错误用于编译非常基本功能的 C++ 版本未按预期运行 - 我什至还没有开始研究 autotools,所以我预计接下来会有更多令人头疼的问题。
不过,此问题特定于 C++ 核心指南的一部分。 Interfaces 6: Prefer Expects() for expressing preconditions
我试着编写了以下简单代码:
#include <iostream>
using namespace std;
int square(int x) {
Expects(x > 0);
return x * x;
}
int main() {
cout << square(3) << endl;
return 0;
}
这在 g++ 中引发了一个错误:
$> g++ -std=c++17 main.cpp
main.cpp: In function ‘int square(int)’:
main.cpp:7:2: error: ‘Expects’ was not declared in this scope
Expects(x > 0);
^~~~~~~
-> [1]
我也尝试过使用 Clang,但它有一个完全不同(且不相关)的问题:
$> clang++ -x c++ main.cpp
main.cpp:1:10: fatal error: 'iostream' file not found
#include <iostream>
^~~~~~~~~~
1 error generated.
-> [1]
我还没有想出如何解决这个问题,所以我没有费心。
Expects
是 GSL 库的一部分。您必须使用一些 GSL 库实现,您可以在 Github:
上找到它
这些是我脑子里想出来的。
CPP 指南可能暗示 the "contracts" proposal which provides the same checks via attributes. It was scheduled for C++20, but later removed for lack of consensus on its scope. See p1823r0 and a standard committee member's Reddit thread 导致删除的理由。
除了 GSL 之外,Excepts
也存在于 C++20
中而不是 C++17
中,语法略有不同
我正在开始一个使用 C++ 的项目,我以前没有在少数学校项目之外使用过它 - 远不及我现在正在处理的范围。
我的目标是尽最大努力遵循 C++ Core Guidelines 工作以避免错误、提高性能,最重要的是:提高代码的可维护性。
我已经 运行 遇到了 数百个 的问题,从我的 g++ / Clang++ 版本不正确到找不到标准库,再到 g++ 使用错误用于编译非常基本功能的 C++ 版本未按预期运行 - 我什至还没有开始研究 autotools,所以我预计接下来会有更多令人头疼的问题。
不过,此问题特定于 C++ 核心指南的一部分。 Interfaces 6: Prefer Expects() for expressing preconditions
我试着编写了以下简单代码:
#include <iostream>
using namespace std;
int square(int x) {
Expects(x > 0);
return x * x;
}
int main() {
cout << square(3) << endl;
return 0;
}
这在 g++ 中引发了一个错误:
$> g++ -std=c++17 main.cpp
main.cpp: In function ‘int square(int)’:
main.cpp:7:2: error: ‘Expects’ was not declared in this scope
Expects(x > 0);
^~~~~~~
-> [1]
我也尝试过使用 Clang,但它有一个完全不同(且不相关)的问题:
$> clang++ -x c++ main.cpp
main.cpp:1:10: fatal error: 'iostream' file not found
#include <iostream>
^~~~~~~~~~
1 error generated.
-> [1]
我还没有想出如何解决这个问题,所以我没有费心。
Expects
是 GSL 库的一部分。您必须使用一些 GSL 库实现,您可以在 Github:
这些是我脑子里想出来的。
CPP 指南可能暗示 the "contracts" proposal which provides the same checks via attributes. It was scheduled for C++20, but later removed for lack of consensus on its scope. See p1823r0 and a standard committee member's Reddit thread 导致删除的理由。
除了 GSL 之外,Excepts
也存在于 C++20
中而不是 C++17
中,语法略有不同