我认为以下是一个很好的编码实践。当一个参数按值传递给一个函数时,它只能被读取,但不能在函数体中修改(或重用)。但这实际上是一种好习惯吗?
示例(我避免做的事):
int foo(int x){
//do lots of cool stuff
x = 69;
//do even cooler stuff
}
从这里开始,我们得到const正确性。如果我的实践很好,那么几乎每个函数的每个参数都应该以“const”开头。实际上“a”是乐观的:
class A{
const int gnoo(const int *const, const double) const;
};
答案 0 :(得分:1)
问题有两个方面,声明和定义。在声明点,函数参数的顶级限定符被删除,因此编译器将删除const
。另一方面,在定义,编译器确保如果参数为const
,则不会在内部修改它。
返回类型是另一个故事,其中const
未从声明中删除,但在这种情况下,您很可能不想制作返回的对象(如果它是值const
,因为这可能会以几种不同的方式限制优化编译器的机会。第一个,C ++ 11中的全新版本是你不能移动一个const
对象,这意味着通过返回一个const
对象来禁止从中移动。在C ++ 03中,这种影响的情况更少,更多的是一个极端情况,但返回const
个对象的优势有限。
有些人建议到处添加const
。我没有,而且我读过的大多数代码都没有。
答案 1 :(得分:0)
你的观点很好。根据语言的不同,编译器/解释器在看到代码时可能会抛出错误或警告。
然而,在某些时候你必须选择是否要尝试保护“开发人员”不要做一些愚蠢的事情,或者只是假设他们是这样并且在代码审查期间捕获这类事情。
利用语法机制使代码更安全是一件好事,恕我直言。不幸的是,它可能会阻碍开发流程。