字面值
#include<bits/stdc++.h>
using namespace std;
int main(){
//指定字面值的类型。
cout<<sizeof(L'c')<<endl;;//宽字符 16位
cout<<sizeof((u8"高"))<<endl;//utf-8
cout<<sizeof u'a'<<endl;//Unicode16位
cout<<sizeof U'a'<<endl;//Unicode32位
cout<<sizeof 45ULL<<endl;//无符号长整型,64位
cout<<sizeof 45u<<endl;//无符号整型
cout<<sizeof 45LL<<endl;//长整型,64位
cout<<sizeof 45L<<endl;//整型,32位
}
变量初始化的方式:
int a=0;
int a(0);
int a={0};
int a{0};
//另外还有默认初始化,定义在函数内部的值不被初始化,要谨慎使用
声明一个变量:
extern int i=100.//这是错误的,不能显式初始化,一个变量只能被定义一次,但是能被声明很多次。使用多个文件时,声明时很有必要的。
作用域操作符::
//#include<bits/stdc++.h>
using namespace std;
int x=100;
int main(){
cout<<::x<<endl;
}
//全局作用域没有名字,所以在左侧为空的时候,输出全局变量,
引用
必须初始化,可以这样理解,引用是对象的另外一个名字,引用不是对象所以不能定义引用的引用。
const
int d=3.14;
const int x=d;
在编译器中:
const tmple=d1;
const int x=d1;
所以非常量的值可以赋值给常量
底层const
const int ,,,
顶层const :
const int *const p3=p2;
另外 constexpr 类型变量可以检验 变量的值是不是一个常量表达式。
decltype
#include<bits/stdc++.h>
using namespace std;
int ok(){return 4;}
int main(){
decltype(ok()) x;//自动分析类型,然后供给使用
}
预处理变量处理
#include <stdio.h>
#define MAX(x,y) (((x)>(y))?(x):(y))
#define MIN(x,y) (((x)<(y))?(x):(y))
int main(void)
{
#ifdef MAX //判断这个宏是否被定义
printf("3 and 5 the max is:%d\n",MAX(3,5));
#endif
#ifdef MIN
printf("3 and 5 the min is:%d\n",MIN(3,5));
#endif
return 0;
}
#define 把一个变量设定为预处理变量,
ifndef(未定义为真)、ifdef(定义为真)和endif检查变量是否已经定义
一旦检查结果为真,那么就一直后续执行到endif为止。