C++变量和基本类型笔记

来源:互联网 发布:语音网络 编辑:程序博客网 时间:2024/06/05 03:43

1、基本类型
含有无符号类型的表达式

会把有符号的类型转换成无符号的类型

int i= -42unsigned u = 10;cout<< u+i<<endl;//如果int占32位,会输出4294967264

所以切勿混用无符号类型和带符号类型

2、字面值常量(literal)
每个字面值常量都对应一种数据类型
整型:
十进制字面值具体的由它的值和符号决定。
默认情况下十进制的字面值是带符号数,八进制和十六进制字面值既可能是带符号的也可能是无符号的。
十进制字面值的类型是int, long, long long 中尺寸最小的(在能容纳下当前值的前提下)。十进制字面值是整数,带符号的只是对字面值取负值。
八进制和十六进制字面值的类型是int, unsigned int, long, unsigned long, long long, unsigned long long 中尺寸最小的。

字符和字符串字面值:
字符:单引号
字符串:双引号

cout<< "hahahaha" //注意这里,一行写不下可以换行哦!    "hehehe" <<endl

布尔字面值和指针字面值:
true和false是布尔类型的字面值
nullptr是指针的字面值。

3、变量
变量定义
初始化
初始化与赋值是完全不同的操作

初始化是赋予初始值,赋值是擦除当前值,用新值代替。

int units_sold = 0;int units_sold = {0};int units_sold{0};int units_sold(0);//上述四条都是正确的初始化方法

默认初始化

每个类各自决定自己初始化对象的方式。而且是否允许不经初始化而定义对象也是有类自己决定。

变量声明和定义的关系
声明:使得名字为程序所知,extern int i;//声明而非定义
定义:负责创建与名字关联的实体。int j;//声明并定义

声明规定了变量的类型和名字,定义不仅规定了类型和名字,还为变量申请了存储空间,也可能会为变量赋一个初值。

变量能且只能被定义一次,但可以多次声明

变量命名规范:

  • 标识符能体现实际含义
  • 变量名一般用小写字母
  • 用户自定义的类一般以大写字母开头
  • 标识符由多个单词组成,单词间应有明显区分。

名字的作用域:
c++大多以花括号分隔

建议第一次使用变量时再定义

嵌套的作用域
内层作用域可以从新定义外层作用域的变量。

int num = 10;int main{    cout<< num<<endl;//10    int num = 20;    cout<<num<<endl;//20    cout<<::num<<endl;//10,::左边为空,向全局作用域获取变量。}

复合类型(compound type)是指基于其他类型定义的类型。
引用和指针

定义引用:&

int ival= 1024int &refval = ivalint &refval;//报错,引用必须初始化

引用即别名

指针(pointer):指向另外一种类型的复合类型。
指针与引用的不同:

  • 指针本身就是一个对象,允许对指针赋值和拷贝,可以先后指向不同的对象。
  • 指针无需在定义时赋初值。

定义指针:*
解引用操作:*//解引用只适用于那些确实指向了某个对象的有效指针。

对符号的理解:
声明时,紧随类型符出现的是声明的一部分,在表达式中使用时看作运算符。

空指针

nullptr,0,NULL //NULL是一个预处理变量,在头文件cstdlib中,值为0.

@把int变量直接赋值给指针是错误的操作,即使变量为0

int zero = 0;int *pi = zero; //这样也不行

@建议初始化所有指针

void* 指针
可以存放任意对象的指针。对存放的地址的类型不了解。

int* p1,p2;//近作用域p1int *p1;

指向指针的指针,指针是对象,可以再次被指针指向
指向指针的引用,引用不是对象,但可以指向指针

const限定符
一旦创建不能修改,因此必须初始化。
多个文件中共享const变量:

extern const int bufSize = 512;

const的引用

指针和const

const double pi = 3.14;double *ptr = &pi; //错误const double *ptr = &pi;//正确,指针的类型必须与所指的对象的类型一致,例外,允许一个指向常量的指针指向非常量对象。

顶层const:指针本身是常量
底层const:指针所指的对象是常量

constexpr和常量表达式

字面类型(literal type)
算数类型、引用类型和指针都属于字面类型,自定义类Sales_item、IO库、string类型不属于,不能被定义成constexpr。

0 0
原创粉丝点击