【发布时间】:2011-12-16 09:23:58
【问题描述】:
最近,我一直在开发一种在我的代码中制作许多东西的做法const:
(1) 函数参数,我知道它永远不会改变。例如:
void foo (const int i, const string s)
^^^^^ ^^^^^
(2) 返回类型为const。例如:
struct A {
...
const int foo () { return ...; }
^^^^^
operator const bool () const { return ...; }
^^^^^
};
(3) 整数或字符串的简单计算。例如:
const uint size = vec.size();
^^^^^
const string s2 = s1 + "hello ";
^^^^^
...还有其他几个地方。通常在其他现实世界的代码中,我看不到标记为const 的小规模变量。但我想,让他们const 永远不会有害。这是一种好的编程实践吗?
【问题讨论】:
-
我仍然喜欢将它用于按值传递的对象,我喜欢我的参数来指示传入的原始值。我讨厌调试嵌套函数,其中
i的值从一个函数发生变化到下一个。至少如果使用了新变量,您可以更容易地发现它。 -
@MarkIngram:所以基本上你是说你更喜欢
unsigned plus(const unsigned a, const unsigned b) { if (b) return plus(a+1,b-1); return a; }而不是unsigned plus(unsigned a, unsigned b) { if (b) { ++a; --b; return plus(a,b) } return a; }?因为在第二个代码中,它看起来好像您正在将参数传递给下一个函数(在这种情况下是一个递归函数),而实际上您正在传递修改后的值?听起来很公平。 -
是的,我认为不需要修改该(第二个)示例中的变量。
-
请参阅 this Q&A 了解为什么 const 返回类型不是一个好主意
标签: c++ coding-style constants