我正在使用 C++ 启动一个项目,除了少数学校项目之外,我之前从未使用过 C++ - 远远超出了我现在正在处理的范围。
我的目标是尽力遵循C++ 核心指南 https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines因为我努力避免错误、提高性能,最重要的是:提高代码的可维护性。
我一直遇到字面上有数百个问题范围从我的 g++ / Clang++ 版本不正确到找不到标准库,到 g++ 使用错误版本的 C++ 进行编译,再到非常基本的函数未按预期运行 -我什至还没有开始研究自动工具,所以我预计接下来还会有更多令人头痛的问题。
不过,这个问题特定于 C++ 核心指南的一部分。接口 6:更喜欢使用 Expects() 来表达先决条件 https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Ri-expects
我尝试编写以下简单代码:
#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 上找到它:
- https://github.com/martinmoene/gsl-lite https://github.com/martinmoene/gsl-lite
- https://github.com/Microsoft/GSL https://github.com/Microsoft/GSL
这些是我脑海中浮现的。
CPP 指南可能提到“合同”提案 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0287r0.pdf它通过属性提供相同的检查。它原计划用于 C++20,但后来由于对其范围缺乏共识而被删除。看p1823r0 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1823r0.pdf以及标准委员会成员的Reddit 主题 https://www.reddit.com/r/cpp/comments/cmk7ek/what_happened_to_c20_contracts/导致删除的理由。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)