标签:
<span style="font-size:18px;"><span style="font-size:18px;">for( int index =0; index != 512; ++ index){ //...... </span></span>上面的for循环代码有两个问题,都和512作为循环上界有关。
<span style="font-size:18px;">int bufSize = 512; // input buffer size for(int index = 0; index != bufSize; ++index){ //...... }</span>我们可以看出,现在是对对象bufSize测试,而不是字面值常量512测试。
<span style="font-size:18px;">const int bufSize = 512; //input buffer size</span>定义bufSixe为常量并初始化为512.变量bufSize仍然为一个左值。但是现在这个左值是不可以修改的,修改任何的bufSize的尝试都会导致编译错误。
<span style="font-size:18px;">bufSize = 0; // error: attemp to write to const object</span>因为常量定义后就不能被修改,所以定义时必须初始化!!!
<span style="font-size:18px;">const std::string hi = "hello";// ok:innitialized const int i,j=0;//error:i is uninitialized const</span>
<span style="font-size:18px;">// file_1.cc int counter; // defination // file_2.cc extern int counter; // uses counter from file_1 ++counter; //increments counter defined in file_1</span>与其他变量不同,除非特别说明,在全局作用域声明的 const 变量是定义该对象的文件的局部变量。此变量只存在于那个文件中,不能被其他文件访问。
<span style="font-size:18px;">// file_1.cc // defines and initialize a const that is accessible to other files extern const int bufSize = fcn(); // file_2.cc extern const int bufSize; // uses bufSize from file_1 for(int index = 0; index != bufSize; ++ index){ //...... }</span>在上述程序中,file_1.cc通过函数fcn的返回值来定义和初始化bufSize。而bufSize又被定义为外部类型extern,这就意味着bufSize可以再其他的文件中被使用。file_2.cc中bufSize同样声明为外部类型extern;不能被初始化。
标签:
原文地址:http://blog.csdn.net/shenziheng1/article/details/51351625