第一章没有什么讲的
iostream库包含两个基础类型istream和ostream
直接第二章吧
算数类型比较不常见的wchar_t 宽字符,char16_t,char32_t Unicode字符。
unsigned char c=-1结果输出是255----》有符号的-1是11111111 第一位是符号位嘛,然后转换为无符号类型,就成了255
signed char c2=256;给带符号类型一个超出它表示范围的值时,结果是未定义的。
也就是说不要混用带符号与无符号类型
这里有个例子:unsigned u=10;int i=-42;cout<<i+i<<endl;//输出-84;cout<<u+i<<endl;//如果Int占32位,输出4294967264;
字面值常量的形式和值决定了它的数据类型十进制字面值的类型是int long longlong 中尺寸最小值,如果一个字面值与之关联的最大的数据类型都放不下,将产生错误,就比如,cout<<2222222222222222222222222222222222222222<<endl;输出什么数字我也不知道。
严格来说,十进制字面值不会是负数,如果我们使用了一个形如-42的负十进制字面值,那个负号并不在字面值之内,它的作用仅仅是对字面值取负值而已;
可以通过前缀后缀来指定字面值的类型,比如42ULL,无符号整型字面值,类型是unsigned long long; L'a',宽字符型字面值,类型是wchar_t;
对象的初始化与赋值不一样,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来代替;
列表初始化:int units_sold=0;int units_sold={0};int units_sold(0);int units_sold{0};
但是如果我们使用列表初始化且初始值存在丢失信息风险时,编译器将报错。
比如:long double ld=3.1415926; int a{ld},b={ld};//错误,转换未执行 int a=ld//正确,但丢失了部分值
默认初始化比较重要,如果时内置类型的变量未被显示初始化,它的值由定义的位置决定,定义于任何函数体之外的变量被初始化位0,定义在函数体内部的内置类型变量将不被初始化,一个未被初始化的内置类型变量的值是未定义的。总的来说,定义于函数体内的内置类型的对象如果没有初始化,则其值未定义,类的对象如果没有显式的初始化,则其值由类确定。
声明使得名字为程序所知,定义负责创建与名字关联的实体;
如果想要声明一个变量而非定义它,就在变量名前加关键字extern,而且不要显式地初始化变量;
extern int i;//声明i而非定义i int j//声明并且定义j extern double pi=3.14//定义
注意::在函数体内部,如果试图初始化一个由extern关键字标记地变量,将引发错误。
作用域:没什么好说的,直接举个例子吧
int main(){ string p="23"; cout<<p; { int p=12; cout<<p; }}//p会分别输出23 12;但是:int main(){ cout<<p; string p="23"; cout<<p; int p=12; cout<<p;}//这样会出错,因为string p与int p产生了冲突;新闻热点
疑难解答