C++ primer plus (chapter4-1)

  前半部分简单,仅记录独特之处。而指针重要,另开一篇。

 

  C-风格字符串以空字符结尾。

strlen(char []); //(cstring和string.h)计算可见的字符数而不包含空字符

 关于函数一般只记录其原型,有时为了会不符合语法,注释()是其所在头文件

 

  cin处理字符串时,使用空白来确定字符串的结尾,且读取时忽略空白,但会将其留在队列,故只能读取一个单词。

cin cin.getline(char [],int) //一次读取一行,以换行符确定结尾,且读取时丢弃,读取第个参数-1个字符储存到第一个参数。

  cin cin.get(char [], int)和getline()相同但不丢弃换行符cin.get()读取一个字符。cin.get(char [], int).get()和cin.getline(char [],int)作用相同。
  get()读取空行后将设置failbit,接下来的输入将被阻断,可以用cin.clear()恢复输入。输入字符串可能比分配的空间长,get(),getline()将把剩下的字符留在队列,而getline()还会设置failbit并关闭输入。
混合使用cin和getline()/get()经常会出现将enter留在队列,被认为是空行,造成failbit。

 

strcpy(char [], char [])  //(cstring和string.h)复制2到1
strcat(char [], char [])  //(cstring和string.h)把2加到1后面,去掉1后边的空字符。

 getline()对于string是getline(cin,string),get()也是

 

原始字符串:字符表示的就是自己,没有转义符。用R来标识原始字符串,"(和)"来默认界定,但是可以在"和(来来改变默认界定符,但是前后必须同步,不用对称,也不能用空白符。如

R"+*("(AAAbbbbbbbb)",aaaaaaaaaa)+*"

 

在struct和class的结束声明}后边需要;
struct可以同时完成定义结构和创建结构变量的工作,

struct example
{
    int a;
    char b
} c,d;

//甚至可以初始化,
struct a
{
    int b;
    char c;
} d=
{ 2,‘a‘ }; //也可以用通用的{}进行初始化。

//也可声明没有名称的struct,
struct
{
    int a;
    char b;
} c; //之后便无法再创建该结构了,但是可以初始化和访问c;

 

  c++也允许像c一样指定占用特定位数的结构成员,  

struct bitfield
{
    unsigned int SN : 4; //4 bits for SN value
    unsigned int : 4; // 4 bits unused
    bool boolvalue 1 ;
} //字段类型应该为整型或枚举,没有名称的字段用来提供间距,每个成员都称为位字段。如bitfield中成员使用时应该说是两个和一个间距,如其初始化
bitfield example = { 278,true};

 

  union可以储存不同的数据,但是只能同时其中一种数据

union one4all
{
	int int_val;
	long long_val;
	double double_val;
};
int main(){
one4all value;
value.int_val=15;
cout<<value.int_val<<endl;
value.double_val=18.3;
cout<<value.double_val<<endl;
cout<<value.int_val; //error  我测试时输出是-858993459
}

 上边出现错误的原因很容易看出struct和union的不同,union每次只能储存一个值一种类型,其用途之一便是,当数据项使用两种或多种类型(但不同时使用)时可以节省空间。当然union的大小就是其储存的最大成员。

 

  对于枚举类型,在不进行强制转换的情况下只能将定义枚举时使用的枚举量赋给这种枚举变量。

enum spectrum { red,orange,yellow,green,blue };
spectrum band=blue;
spedctrm band1= spectrum(2);
//valid
spectrum band2
=2; //invalid, 2 not an enumerato

枚举类型只定义的赋值运算符,枚举可以被提升为int类型,但是int不会自动转换为枚举类型,对不适当的值进行强制转换,结果是不确定的。

int value=1+red; //valid
spectrum band=red+orange; //invalid
spectrum color=spectrum (5); //undefined

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。