C++ 语言
导航
返回编程语言分类
C++语言在C语言基础上发展而来,支持面向对象等多种编程方式。C++功能强大,可以编写高效的程序;运行速度和编译后软件大小还取决于具体实现。
Hello world
C++的第一个程序
1 |
|
变量
变量提供一个具名的、可供程序操作的存储空间。
对象:对象是指一块能储存数据并具有某种类型的内存空间。
当对象在创建时获得了一个特定的值,我们就说这个对象被初始化了。
info
在C++中初始化和赋值不能混为一谈
下面是四种独立的初始化写法,不能在同一作用域中重复定义同名变量。
1 | int units_sold = 0; |
花括号的初始化方法被称为列表初始化。
默认初始化:如果我们没有指定初始值,则变量会被默认初始化。
info
建议初始化每一个内置类型的变量
变量的声明和定义
C++语言支持分离式编译。
为了支持分离式编译,C++语言将声明和定义区分开来。
声明:一个文件想要使用别处定义的名字必须包含对那个名字的声明。
定义:定义负责创建与名字关联的实体。
仅声明而不定义变量时不提供初始化值;例如extern声明若带初始化值,就同时是定义。
info
变量只能被定义一次,但是可以被声明多次。
1 | extern int i;//这是声明 |


变量名的作用域
局部变量的块作用域通常以花括号为界,此外还有命名空间作用域、类作用域等。
info
建议:当你第一次使用变量的时候定义他。
基本类型
算术类型
算术类型是最基本的类型,是用来存储一个数字,或一个字符的类型,

字面值常量:
- 在程序中,42,就是一个字面值常量,“”,其中的内容也是字面值常量。
- 不带后缀的十进制整数字面量优先使用int,超出范围时依次考虑long、long long;八进制和十六进制还可能使用无符号类型。
- 用单引号的单个字符默认为char型,双引号的字符默认为字符串数组型。
- 浮点数默认为double型。
用前缀和后缀可以定义字面值常量的类型,具体用法如下。

上图按C++11整理;从C++20起,u8字符串字面量的元素类型是char8_t。各类型的实际大小与实现有关。
复合类型
引用:引用为对象起了另外一个名字,引用类型引用另外一种类型。
引用在定义时就要初始化,引用和被引用的变量指向同一个内存空间。
1 | int &refVal=ival;//这是引用 |
const限定符
对于变量来讲,加上const就变成了一个常量,不能通过赋值运算符改变const定义的变量。
对于指针来讲,const分为顶层const和底层const
1 | int i=1; |
constexpr:这个变量所声明的值必须是常量表达式。
1 | constexpr int *p = nullptr;//指针本身具有顶层const,定义时必须用常量表达式初始化 |
处理类型
auto和decltype是两个重要的类型推导工具:auto通常根据初始化表达式推导类型,decltype取得表达式的类型,也可用于声明函数返回类型。
命名空间using声明
C++标准库中的许多名字位于std命名空间,例如使用using std::cout后可以省略cout前面的std::。
标准库string
定义在string头文件中
使用string类型必须添加头文件
1 |

s.size()的返回类型是无符号的string::size_type。与有符号负数混合比较时可能发生无符号转换,结果取决于运算符和值,不能简单地认为一定是true。
C++支持字符串相加,但不能将字面量与字面量相加。
string处理字符的库:cctype头文件

vector类型
定义在vector头文件中
暂不理解,以后再写。
迭代器

不同类别的迭代器支持的操作不同,例如–iter要求双向或随机访问迭代器。
数组
数组与vector相似,都是存放类型相同的对象的容器,但数组大小确定不变,不能随意增加元素。
cstddef头文件:size_t是sizeof结果使用的无符号整数类型,范围有限;ptrdiff_t是同一数组内两个指针相减所得的有符号整数类型。
iterator头文件:begin,end函数
cstring头文件:
