C++类型和声明

1.类型

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;
	}
}

C++类型和声明_第1张图片

void digits()
{
	for (int i = 0; i != 10; ++i)
	{
		//cout << static_cast('0' + i)<
		cout << ('0' + i);
	}
}
//0的ASCII码为48

在这里插入图片描述

C++类型和声明_第2张图片

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; //指针所指向的对象类型未知

2.声明

可选的前置修饰符(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;

C++类型和声明_第3张图片

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);

你可能感兴趣的:(C++,c++,指针,字符串,c++11)