0

可能重复:
值参数的常量正确性

我认为以下是一个很好的编码实践。当参数通过值传递给函数时,它应该只被读取,而不能在函数体中修改(或重用)。但这真的是一个好习惯吗?

示例(我避免做的事情):

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;
};
4

2 回答 2

1

问题有两个方面,声明定义。在声明点,函数参数的顶级限定符被删除,因此const编译器将删除。另一方面,在定义中,编译器确保如果参数是const,则不会在内部修改。

返回类型是另一回事,其中const没有从声明中删除,但在这种情况下,您很可能不想制作返回的对象(如果它是按值)const,因为这可能会限制优化的机会你的编译器有几种不同的方式。第一个,C++11 中的全新内容是你不能移出一个const对象,这意味着通过返回一个const对象你禁止从它移出。在 C++03 中,这种影响的情况越来越少,但返回const对象的优势有限。

有些人建议const到处添加。我没有,我读过的大多数代码也没有。

于 2012-05-30T14:29:19.980 回答
0

你的观点很好。并且根据语言的不同,编译器/解释器在看到像您的第一个示例这样的代码时可能会抛出错误或警告。

但是,在某些时候,您必须选择是否要尝试保护“开发人员”免于做一些愚蠢的事情,或者只是假设他们这样做并在代码审查期间发现这种事情。

恕我直言,利用句法机制使代码更安全是一件好事。不幸的是,它可能会阻碍开发流程。

于 2012-05-30T14:28:47.780 回答