- 复合类型声明
int* p1,p2;//p1为指向int类型的指针,p2为int型变量。
int i=42;
int *p; //p是一个int型的指针
int *&r=p; //r是一个对指针p的引用
r=&i; //r引用了一个指针,因此给r赋值&i就是令p指向i
*r=0; //解引用r得到i,也就是p指向的对象,将i的值改为0
要理解上述r的类型是什么,可以从右向左读r的定义,离变量名最近的符号就是r 的类型,代码中r最近的符号为&,则r为引用。此例中*说明r引用的是一个指针,int则说明r引用了一个int型的指针。
- 使用const限定符限定变量,必须要初始化,且初始化后,变量的值就不能再改变。
多个文件中同名的const变量实际上是不同的对象,如果希望不同文件的同名const对象是同一个对象,需要在声明和定义的前面加上extern。
把引用绑定到const对象上,称为对常量的引用,即对const的引用称为对常量的引用。
指向常量的指针,不能用于修改其所指对象的值。
- 常量指针必须初始化,并且初始化后不能再改变存放在指针中的地址,不变的是指针本身的值而不是指向的值。
int errNumb=0;
int *const currErr=&errNumb;//curErr将一直指向errNumb
const double pi=3.1415;
const double *const pip=π//pip是一个指向常量对象的指针
指针本身是常量不代表不能通过指针修改所指对象的值,要看所指对象是否是常量,如果所值对象是常量则不能改变,否则编译器将报错。
- 类型别名使用typedef如
typedef double wage;
typedef wage base,*p//base是double的同义词,p是double*的同义词
- using关键词用于别名声明的
using SI=Sale_item;
- 注意,类型别名指代复合类型时不是简单的替换,如
typedef char *pstring;
const pstring cstr=0; //cstr是一个指向char的常量指针
const pstring *ps; //ps时一个指针,对像是指向char的常量指针
第二句不能简单的替换为
const char *cstr=0;这样就变成了指向const char的指针
- auto类型的说明符让编译器自动分析表达式所属的类型
auto item =val1+val2; //通过val1和val2推断item的类型
- decltype类型指示符,选择并返回操作数的数据类型。如果decltype使用的是一个不加括号的变量,则得到的结果就是该变量的类型;如果给变量加上了一层或多层括号,编译器就会把它当做是一个表达式。
decltype((i))的结果永远是引用,而decltype(i)只有当i本身就是一个引用时才是引用。
- 类定义后记得加分号,因为这里可以直接声明对象,需要用分号表示结束,如果不声明就直接加分号即可。
- string表示可变长的字符序列,vector表示某种给定对象的可变长序列。
- 头文件不应包含using声明,因为头文件的内容会拷贝到所有引用它的文件中去,如果头文件内有using声明,每个使用了该头文件的文件就都会有这个声明,可能会产生名字冲突。
- 初始化string对象的方法:
string s1;
string s2(s1);
string s2=s1;
string s3(“value”);
string s3=“value”;
string s4(n ,‘c’);//用n个字符c组成字符串
- string操作
os<<s | 将s写到输出流os中,返回os |
is>>s | 将is中读取的字符串赋给s,字符串以空白分割,返回is |
getline(is,s) | 从is中读取一行赋给s,返回is |
s.empty() | s为空返回true,否则返回false |
s.size() | 返回s中字符的个数 |
s[n] | 返回s中的n个字符的引用,从0算起 |
s1+s2 | 返回s1与s2连接后的结果 |
s1=s2 | 用s2的副本代替s1中的字符 |
s1==s2 | s1与s2的字符相等为真 |
s1!=s2 | 不相等为真 |
<,<=,>,>=, | 利用字符字典序比较,对大小写敏感 |
- string输入,会忽略开头的空格,从第一个字符开始输入,直到下一个字符为空格时停止。比如输入“ hello world ”的输出为“hello”。
- string中的size函数返回的时无符号整数,如果表达式中使用带符号数可能引发错误。如
line.size()<n;//如果n取负数这个表达式恒成立,因为负数n会转化为一个很大的无符号数
所以当表达式中带有size函数计算时就不要使用int型变量了。
- string对象的比较规则:
1、当两个长度不同,且较短string对应位置字符与长string相同,较短的小于长的。
2、对应位子字符不同,比较结果时string对象中第一对相异字符的比较结果(字典序)。
- 对string对象中的每个字符处理时,可以使用范围for语句。
for(declearation:expression)
statement
如果想要改变string对象中的值,必须把循环定义中的declearation定义成引用类型。
- 标准类型库vector
表示对象的集合,其中所有对象的类型都相同。