当我遇到函数来计算立方体的体积时,我正在阅读我的C++书籍(Deitel)。代码如下:传递值时不是“const”冗余吗?
double cube (const double side){
return side * side * side;
}
使用“常量”限定词的解释是这样的:“在const修饰应该被用来执行最小特权原则,告诉该函数不修改编译器可变的一面“。
我的问题:是不是在这里使用“const”冗余/不必要,因为变量是通过值传递的,所以函数无法修改它?
当我遇到函数来计算立方体的体积时,我正在阅读我的C++书籍(Deitel)。代码如下:传递值时不是“const”冗余吗?
double cube (const double side){
return side * side * side;
}
使用“常量”限定词的解释是这样的:“在const修饰应该被用来执行最小特权原则,告诉该函数不修改编译器可变的一面“。
我的问题:是不是在这里使用“const”冗余/不必要,因为变量是通过值传递的,所以函数无法修改它?
const
限定符可防止函数内的代码修改参数本身。当一个函数大于平凡的大小时,这样的保证可以帮助你快速阅读和理解一个函数。如果您知道side
的价值不会改变,那么随着时间的推移,您不必担心随着时间的推移跟踪其价值。在某些情况下,这甚至可以帮助编译器生成更好的代码。
一个不重要的人会这样做,理所当然,因为它总体上是很好的风格。
有道理。谢谢。 – 2012-01-03 15:10:16
为什么“也”?这是*所有*它。 – 2012-01-03 18:12:44
@KeithThompson - 事实上,就是这样,但O.P.正在考虑const ref参数,其中'const'使您不会更改原始对象。 – 2012-01-03 18:49:54
你可以做这样的事情:
int f(int x)
{
x = 3; //with "const int x" it would be forbidden
// now x doesn't have initial value
// which can be misleading in big functions
}
+1说明:) – 2012-01-03 15:17:21
const'这里的'的意思是,你不能修改''里面立方体()'方法side'参数,以避免意外行为。 – 2012-01-03 15:09:10
有时候事情更多的是关于“良好实践”而非必要性。我认为这是其中的一次。 – destan 2012-01-03 15:11:21
我认为这些答案在解释你为什么这样做的过程中做了很好的工作,但我只是将它添加到外部调用者中,'const' *是*冗余的,不是函数签名的一部分。这意味着你可以在函数声明中不做任何改变。如果出于某种原因想要使代码更易维护,并且不会影响调用代码,也可以稍后将其删除。 – 2012-01-03 16:37:57