1.1bool(布尔值):布尔值,取true或者false,占1个字节。
void f(int a,int b)
{
bool b1={a==b};
//a=b,则b1为true;否则为false;
}
bool is_open(File*);
bool greater(int a,int b) {return a>b; }
bool b1=7; //b1为false;
int i1=true;
int i2 {ture}; //i1;i2均为1;
void f(int i)
{
bool b1 {i!=0};
}
bool a = true;
bool b = true;
bool x = a + b;
bool y = a || b;
bool z = a - b;
cout << "x=" << x << "; y=" << y << "; z=" << z << endl;
指针也能被隐式转化为bool类型
void g(int *p)
{
bool b=p;
bool b2 {p!=nullptr};
if (p) //等价于p!=nullptr;
{
cout<<"p不为0"<<endl;
}
}
1.2 char //字符,如‘a’或者’9’,占1个字节。
signed char:-127~127;unsigned char:0~255;
计算任意字符所对应的整数值:
void intval()
{
for (char c; cin >> c;)
{
cout << "the value of " << c << " is " << int{ c } << endl;
}
}
void digits()
{
for (int i = 0; i != 10; ++i)
{
//cout << static_cast('0' + i)<
cout << ('0' + i);
}
}
//0的ASCII码为48
1.3 整型类型
整数类型包含int、signed int和unsigned int。整数还可以划分成另外4种形式:short int、int、long int和long long int。其中,long int即long;long long int即long long。类似,short 是short int的同义词;unsigned是unsigned int的同义词;signed是signed int的同义词。
1.4浮点数类型
默认情况下,浮点数字面值常量的类型是double;如果是想定义一个float类型的常量,数字末尾记得加上后缀F和f;如:2.0f;2.9e-3f;
如果是想定义一个long double类型的常量,数字末尾记得加上后缀l和L;如:2.0L;3.1415926L;
1.5前缀和后缀
0 八进制
0x 0X 十六进制
u U unsigned
l L long
ll LL long long
后缀l和L可以与u和U结合一起使用,表达数据类型为unsigned long。
1.6 void 类型
一般来说,void有两个作用;一是作为函数的返回类型表示该函数不返回任何实际的值;二是作为该指针的基本类型部分以表明指针所指对象的类型未知。
例如:
void f(); //函数f不返回任何值
void *pv; //指针所指向的对象类型未知
可选的前置修饰符(static、virtual);
基本类型(vector、const int);
可选声明符(p[7]、n);
可选后缀函数修饰符(const、Noexcept);
可选初始化器和函数体(={6,5,4}、{return x});
const charkings[]={“a”,“b”,“c”};
基本类型是const char,声明符是kings[]
注意virtual和extern、constexpr等用法。
//缺少数据类型
const c=7
gt(int a,int b)
{
return(...)
}
2.1声明多个名字
int x,y; //int x,int y;
int *x,y; //int *x,int y;
int x,*y; //int x,int *y;
int v[10],*pv; //int v[10];int *pv;
标识符大命名区分大小写,因此count和Count是两个不同的名字。
2.2作用域
主要分为几大部分:局部作用域:局部名字的作用域从声明处开始,到声明语句所在的块结束,块是指一对{}所包围的代码片段。
类作用域:该类中的成员名字和类成员名字,它们的作用域从类声明的{开始,到类声明的结束为止。
名字空间作用域:从声明语句开始,到名字空间结束。
全局作用域:定义在任意函数、类、枚举类和名字空间之外的名字。其作用域从声明语句开始,到声明语句所在文件末尾结束。
语句作用域:从声明语句开始,到语句结束为止。
函数作用域:从声明它开始到函数体结束为止
void hide_name()
{
int x; //局部变量x隐藏全局变量x
x = 1; //赋值
cout << x << endl;
{
int x; //隐藏是上一个局部变量x
x = 2; //赋值
cout << x << endl;
}
x = 3;
cout << x << endl;
}
int x=8; //全局变量x
cout << x << endl;
hide_name();
int *p = &x;
cout << p << endl;
int x;
void f2()
{
int x = 4;
::x = 2; //为全局变量x赋值
x = 3; //为局部变量x赋值
cout << x << endl;
}
f2();
cout << x << endl;
2.3初始化
初始化有四种形式
X a1 {v}; //推荐使用
X a2 ={v};
X a3 =v;
X a4(v) ;
空初始化列表{}指定默认值进行初始化
int x4{}; //赋值为0
double d4{}; //赋值为0
char *p{}; //赋值为nullptr
vector v4{}; //赋值为空向量
string s4 {}; //赋值""
初始化器列表
complexz1(1,2);
complexf1();
complexz2{1,2};
complexf2{};
auto x1 {1,2,3,4}; {}列表自动推导为initializer_list.
auto x1 {1.2,2.5,3.6,4.3}; {}列表自动推导为initializer_list.
auto x1 {1.3,2,3.5,4}; {}无法自动推导
auto和decltype()报道编译器已知的一种表达类型。
int a1=123;
auto y=65.2;
void gg(int& x)
{
auto y = x;
auto& z = x;
cout << z << endl;
cout << "auto type: " << typeid(y).name() << endl;
cout << "auto type: " << typeid(z).name() << endl;
}
使用{}可以进行类型强制转换,或者用auto。
auto v1=123; //int
auto v1 {123};
auto v2=‘c’; //char
auto v2 {‘c’};
auto v3=f(); //适合的类型
auto v3 {f()};
2.4对象和值
2.5类型别名
typedef int int32_t //等价 using int32_t=int;
typedef short int16_t //等价 using int16_t=short;
typedef void(PtoF)(int) //等价 using PtoF=void()(int);