理由:
两个相邻参数,如果类型相同,很容易顺序颠倒。比如
voidcopy_n(T*p,T*q,intn);//copyfrom[p:p+n)to[q:q+n)这是KRC风格接口的一个讨厌的变体,目标和源头参数很容易颠倒。
把源头参数声明成const就比较容易识别他们的关系了。因为,我们复制的时候,一般不会去改变数据源。
voidcopy_n(constT*p,T*q,intn);//copyfrom[p:p+n)to[q:q+n)例外:
如果不关心参数顺序,那就不存在这个问题,就不需要const修饰了:
intmax(inta,intb);替代方案:
不要用指针传递数组。可以通过span表示一个序列对象:
voidcopy_n(spanconstTp,spanTq);//copyfromptoq替代方案:
定义结构体,用结构体的成员名表示相应的参数:
structSystemParams{stringconfig_file;stringoutput_path;secondstimeout;};voidinitialize(SystemParamsp);因为调用的时候,要把参数填到带名字的成员变量中,这样可以明确参数的意义。
强化策略:
(简单)如果出现连续两个相同类型的参数,警告。
C++核心指南是由C++创始人BjarneStroustrup和ISO/ANSIC++标准委员会秘书HerbSutter领导开发的关于如何正确高效使用C++的在线文档。就像C++语言本身一样,这些指南是许多组织中许多人多年讨论和设计的结果。
kimim