1 超出数据类型指定长度的赋值(1)无符号数据类型unsigned char ch1= 336;unsigned char ch2 = -1;上面两个赋值都超出了unsigned char 类型的范围,大部分的编译器对这种情况是这么处理的:允许赋值,仅仅给出一个警告,但是是经过modulo之后的值。cout(2) 对于有符号的书来说,要根据具体的编译器来定。2 浮点型的有效数字float类型仅提供6位有效数字,double类型至少提供10位有效数字3 definitions 和declarations(变量的定义和声明)主要的区别就是定义要分配存储空间,声明不分配存数空间,仅仅谁说明名字是什么,类型是什么而已。看看下面集中定义和声明的方式:extern int i;    // 声明int i;              //定义extern double pi = 3.14    // 定义4 变量的作用范围从声明开始到范围结束,局部变量覆盖全局变量,看下面的代码片段 int i = 100, sum = 0; for (int i = 0; i != 10; ++i) sum += i; std::cout 输出结果应该是: i= 100     sum = 45 int sum = 0; for (int i = 0; i != 10; ++i) sum += i; std::cout 编译出错,因为i没有被定义(cout中的i)5 const 变量的作用范围const的变量的作用范围是本文件,即使它被声明成全局变量。要想在其他文件中使用本文件中定义的const变量,看下面代码 // file_1.cc // defines and initializes 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//uses bufSize defined in file_1 for (int index = 0; index != bufSize; ++index) // ...在声明和定义处都需要加extern关键字6  vector::const_iterator 和 const  vector::iterator看下面两个例子,就能明白二者的区别 for (vector::const_iterator iter = text.begin(); iter != text.end(); ++ iter) *iter = " "; // error: *iter is constvector::const_iterator iter 允许自身变化,但不允许修改它下面指向的数据,即指向的内容是常量 vector nums(10); // nums is non const const vector::iterator cit = nums.begin(); *cit = 1; // ok:cit can change its underlying element ++cit; // error: can't change the value of citconst vector::iterator cit 允许修改它指向的下面的数据,不允许自身的变化,即本身是个常量7 typedef string *pstringconst pstring cstr; 解释这个声明的意思?相信大部分人是这么理解的,typedef string *pstring 是定义了一个指向string 的指针类型,因此const pstring cstr const string * cstr即 指向一个const string的指针,但是这是错误的。正确的解释应该是, cstr是一个const指针,指向string类型的字符串
11-04 02:04
查看更多