我对const还是有点感触的, 每次看到这样的代码, 我巴不得把代码作者揪出来问个究竟:
#include <iostream>
using namespace std;
int main()
{
char *p = "bad";
return 0;
}
代码的作者丝毫没有意识到问题所在么? 那你看看这个代码:
#include <iostream>
using namespace std;
int main()
{
char *p = "bad"; // danger !!!!!!
// ...
// ...
char c;
scanf("%c", &c);
if('x' == c)
{
cout << "if" << endl;
*p = '\0';
}
// ...
return 0;
}
当c为'x'的时候, 上述程序会出现运行错误(编译器根本检查不出来)。 如果用const char *p = "abc"; 那就是编译期错误了, 编译器强迫程序员修改。
我之前说过了, char *p = "bad";会导致运行期错误, 而且有时候是概率性的, 有可能造成整个系统的崩溃, 非常难以定位, 而如果用const char *p = "bad";就好多了, 最多是编译器的错误, 非常容易定位并修改。 在这个场景下, 有const的优点是:
1. 如果有错, 那也是编译期间错误,非常容易定位, 而且编译器强迫程序员修改。
2. 错误不会到运行期, 不会有概率性恼火的问题, 用户自然也不会抱怨了。
具体的详细论述, 请参考我之前的博文:http://blog.csdn.net/stpeace/article/details/42615901
除了上述健壮性之外, 加上const会增强程序的可读性, 程序员不需要提心吊胆地担心某一变量/对象是否会改变, 关于这一点, 我在如下博文中也论述并举证过:http://blog.csdn.net/stpeace/article/details/45349757
所以, 在Effective C++中, 作者Scott Meyers指出:尽可能使用const. 也就是说, 能用const的地方, 该用const的地方, 都用const吧。