第四章 数组和指针
1.int *p = & ia[2];
int *k = p[-2]; 正确
2.const size_t arr_sz = 5;
int int_arr[arr_sz]={0,1,2,3,4};
for(int * pbegin = int_arr,*pend = int_arr+arr_sz;pbegin!=pend;++pbegin)
cout<<*pbegin<<' ';
for(vector<int>::iterator tier =ivec.begin();iter!=ivec.end();++iter)
*iter=0;
3.const double pi = 3.14;
double * ptr = π 错!
4.typedef string * pstring;
const pstring cstr;//等价于 string * const cstr;
5.strcmp(str1,str2) 等效于str1-str2形式
strlen(str) 统计长度不包含'\0'
6.int *pia2 = new int[10]; //未初始化
int *pia3 = new int[10](); //已初始化
7.vector <T> v1; //空vector
vector <T> v2(v1); //用v1初始化v2
vector <T> v3(n,i); //用n个i初始化v3
vector <T> v4(n); //n个初始化元素的v4
vector <int> v5(int_arr+1,int_arr+4); //用int_arr[1]~int_arr[5]初始化v5
第五章 表达式
1.21%8 = -5;
21%-5= 1或者-4;编译器决定
2.尽量用++i而不是i++,因为前者需要使用一个临时变量保持之前值。
3.解引用操作符优先级低于点操作符,所以
*p.add()等价于*(p.add());
(*p).add()等价于p->add()
4.sizeof()不计算表达式
5.结合属性与优先级
左 ::域运算符
左 .成员运算符;->成员;[]下表;()函数调用
右 ++后自加;--后自减;显示类型转换
右 sizeof();++前自加;--前自减;~取非;!取反;-/+正负号;*解引用
&取址;()类型转换;new/delete/delete[]开辟动态内存;
左 ->*;.*;
左 *乘;/除;%求余;
左 +加;-减;
左 <</>>位移;
左 <;<=;>;>=比较
左 ==;!=
左 &位与
左 ^位异或
左 |位或
左 &&逻辑与
左 ||逻辑或
右 ?:
右 =赋值;*=;/=;%=;+=;-=;<<=;>>=;&=;|=;^=;
右 throw抛出异常
左 ,逗号
6.计算||和&&时,当仅当右操作符能影响结果时才会计算右操作数
7.C++保证删除null/0指针安全。
8.const对象不可以修改,但是可以删除。
9.dynamic_cast 支持运行时识别指针或者引用所指向对象
const_cast 去除const属性
static_cast 等效于编译器隐式执行类型转换
reinterpret_cast通常为操作数的位模式提供较低层的重新解释,也就是说将数据以二进制存在形式的重新解释
1.int *p = & ia[2];
int *k = p[-2]; 正确
2.const size_t arr_sz = 5;
int int_arr[arr_sz]={0,1,2,3,4};
for(int * pbegin = int_arr,*pend = int_arr+arr_sz;pbegin!=pend;++pbegin)
cout<<*pbegin<<' ';
for(vector<int>::iterator tier =ivec.begin();iter!=ivec.end();++iter)
*iter=0;
3.const double pi = 3.14;
double * ptr = π 错!
4.typedef string * pstring;
const pstring cstr;//等价于 string * const cstr;
5.strcmp(str1,str2) 等效于str1-str2形式
strlen(str) 统计长度不包含'\0'
6.int *pia2 = new int[10]; //未初始化
int *pia3 = new int[10](); //已初始化
7.vector <T> v1; //空vector
vector <T> v2(v1); //用v1初始化v2
vector <T> v3(n,i); //用n个i初始化v3
vector <T> v4(n); //n个初始化元素的v4
vector <int> v5(int_arr+1,int_arr+4); //用int_arr[1]~int_arr[5]初始化v5
第五章 表达式
1.21%8 = -5;
21%-5= 1或者-4;编译器决定
2.尽量用++i而不是i++,因为前者需要使用一个临时变量保持之前值。
3.解引用操作符优先级低于点操作符,所以
*p.add()等价于*(p.add());
(*p).add()等价于p->add()
4.sizeof()不计算表达式
5.结合属性与优先级
左 ::域运算符
左 .成员运算符;->成员;[]下表;()函数调用
右 ++后自加;--后自减;显示类型转换
右 sizeof();++前自加;--前自减;~取非;!取反;-/+正负号;*解引用
&取址;()类型转换;new/delete/delete[]开辟动态内存;
左 ->*;.*;
左 *乘;/除;%求余;
左 +加;-减;
左 <</>>位移;
左 <;<=;>;>=比较
左 ==;!=
左 &位与
左 ^位异或
左 |位或
左 &&逻辑与
左 ||逻辑或
右 ?:
右 =赋值;*=;/=;%=;+=;-=;<<=;>>=;&=;|=;^=;
右 throw抛出异常
左 ,逗号
6.计算||和&&时,当仅当右操作符能影响结果时才会计算右操作数
7.C++保证删除null/0指针安全。
8.const对象不可以修改,但是可以删除。
9.dynamic_cast 支持运行时识别指针或者引用所指向对象
const_cast 去除const属性
static_cast 等效于编译器隐式执行类型转换
reinterpret_cast通常为操作数的位模式提供较低层的重新解释,也就是说将数据以二进制存在形式的重新解释