我对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吧。

 


本文转载:CSDN博客