本篇内容主要讲解“C++中怎么表达意图”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++中怎么表达意图”吧!
只要代码不是意图的直接陈述(例如在名称或者注释中),就可能存在实际行为和意图不一致的情况。
gsl::index i = 0;while (i < v.size()) { // ... do something with v[i] ...}
恰好循环通过v的每个元素的意图没有被表达。index的实现细节被暴露出来(因此它可能被误用),而且i的有效范围要超过循环的范围,这一点可能是有意的,也可能是无意的。读者无法只通过这段代码了解这些。
Better(较好):
for (const auto& x : v) { /* do something with the value of x */ }
现在,这里没有清楚地提示迭代机制和作用在const元素的循环操作符,因此也就不会发生意外的修改。如果需要修改,就这么写:
for (auto& x : v) { /* modify x */ }
有时作为更好的选择,可以使用一个命名算法。这个例子中使用Ranges TS中的for_each是因为它可以直接表达意图。
for_each(v, [](int x) { /* do something with the value of x */ });
for_each(par, v, [](int x) { /* do something with the value of x */ });
最后一个变形更加清楚的表明了我们并不关心v中元素被处理的次序。
程序员应该熟悉
The guidelines support library 支持库指南
The ISO C++ Standard Library ISO C++标准库
Whatever foundation libraries are used for the current project(s)目前项目中使用的任何基本库。
换一个表达:表明要做什么而不是怎么做。
Note(注意)
某些语言比其他语言更善于表达意图。
Example(示例)
如果两个整数值表示2维平面中的一个点的坐标,那么可以说:
draw_line(int, int, int, int); // obscure难以理解的draw_line(Point, Point); // clearer清晰的
寻找那些具有更好选择的常见样式。
simple for
loops vs. range-for
loops 对于循环来讲,比较简单的for循环和range
f(T*, int)
interfaces vs. f(span<T>)
interfaces f(T*, int)
接口对 f(span<T>)
接口
loop variables in too large a scope(很大范围中使用的循环变量)
naked new
and delete 直接的new和delete操作
functions with many parameters of built-in types 包含很多内置类型参数的函数
到此,相信大家对“C++中怎么表达意图”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。