您的位置:首页 > 编程语言 > C语言/C++

C++ Primer 第(4-5)章一句话知识点总结

2015-08-15 21:24 609 查看
注意制定每个规则背后的原因。

(1)没有所有的元素都是引用的数组。

(2)数组的维数必须是大于等于1的常量表达式定义。非const变量以及要到运行时才知道其值的const变量都不能用于定义数组的维数。

(3)数组不允许直接赋值。char a[] = {'a'}; 一个字节 ;char a = "a";两个字节

(4)指针用于指向单个对象,而迭代器只能用于指向容器内的元素。

(5)string* s, p;一个指针,一个string对象。

(6)把int型变量赋给指针是非法的,尽管此int型变量的值为0。但允许把数值0或在编译时可获得0值的const量赋给指针。

(7)指针的类型用于确认指针所指对象的类型,因此初始化或者赋值时必须保证类型匹配。void类型指针可以保存任何对象的地址,但不允许使用它操作它所指向的对象。

(8)在表达式中使用数组名时,该名字会自动转换为指向该数组的第一个元素的指针。

(9)在使用下标访问数组时,实际上是对数组元素的指针做下标操作。只要指针指向数组元素,就可以对它进行下标操作。 int k = p[-2];

(10)把一个const对象的地址赋给一个普通的,非const对象的指针会导致编译错误。

(11)不能用void型指针保存const对象的地址。

(12)允许把非const对象的地址赋给指向const对象的指针。

(13)不能保证指向const的指针所指对象的值一定不可修改。

(14)与任何const量一样,const指针也必须在定义时初始化。

(15)指针所指对象的值能够修改完全取决于该对象的类型。

(16)typedef string *p; const p str;        ----------------string *const str;

(17)C++语言通过 const char* 类型的指针来操作C风格字符串。

(18)string *p = new string[10];int *p = new int[10]; int *p = new[10]();区别:动态分配数组的类类型必须有默认构造函数

(19)const int *p = new int[10]; 错误  const int *p = new int[10]();

(20)char s[0];不行啊  char *p = new char[0];可以

(21)delete []a;漏掉方括号,会导致内存泄露,编译不出错,运行才出错(why)

(22)int ia[3][3]; int (*p)[3] = ia; int *p = &ia[0]; 不行  int (*p)[3] = &ia[0]; int *p = ia[0]; int *p = ia;不行(思考原因)

(23)表达式的结果是右值,可以读取该结果值,但不能对其赋值。

(24)每个操作符都控制了其假定的求值次序,即我们是否可以假定左操作数总是先于右操作数求值。大部分的操作符无法保证某种特定的求值次序。

(25)%操作数只能为整型。

(26)/和%:如果两个操作符的两个操作数都是正数,则结果也都为正数,若都为负数,除法操作结果为正,求余操作结果为负。

(27)逻辑与和逻辑或的短路求值特性。

(28)关系操作符的左结合特性。if (x < y < z),若z大于1,永远为真。

(29)位操作符使用整型操作数,左操作数可为正数可为负数,最好为正数,因为如何处理符号位依赖于机器。右操作数必须为正数,且严格小于左操作数位数的值。

(30)cout << 10 < 42;  1024 = ival; i + j = ival;有错

(31)数组名是不可修改的左值,因此数组不可用做赋值操作的目标。

(31)赋值操作符的值是其左操作数的值,其结果的类型是左操作数的类型。int i; int *j; i = j = 0;有错

(32)使用符合赋值操作符时,其左操作数只计算一次,相似的表达式则计算两次。

(33)++i; i++; *iter++;区别

(34)cout << (i < j ? i : j);    cout << (i < j) ?i : j;  cout << i < j ? i : j;  
输入输出操作符的优先级????

(35)逗号表达式的结果是其最后边表达式的值。

(36)优先级口诀:去掉一个最高的,去掉一个最低的,一,二,三 ,赋值。二元操作的顺序为  算术,关系,逻辑。中间插入移位和逻辑位。

(37)int *p = new int; int *p = new int(); int x(); const int *p = new const int(1024); delete p;     记得删除后置0.

(38)显示转换

           dynamic_cast:将基类类型的引用或指针安全的转换为派生类型的引用或指针。(typeid操作符)

           const_cast:去除掉const属性。

           static_cast:强制转换,告诉编译器,我们知道并不关系潜在的精度损失。

           reinterpret_cast:为操作数的位模式提供较低层次的重新解释。int *i; char *c = reinterpret_cast<char*>(p)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++Primer