C++简介
-
C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言
-
任何合法的 C 程序都是合法的 C++ 程序
-
使用静态类型的编程语言是在编译时执行类型检查,而不是在运行时执行类型检查
面向对象开发的四大特性:
-
封装
-
抽象
-
继承
-
多态
标准库
-
核心语言
-
C++ 标准库
-
标准模板库(STL)
ANSI 标准
ANSI 标准是为了确保 C++ 的便携性
g++使用
-
自动使用 C++ 标准库
-
$ gcc main.cpp -o main
-
使用
-o
选项指定可执行程序的文件名 -
多个 C++ 代码文件生成一个可执行文件
-
指定使用 C++11,
-std=c++11
-
也可以使用 makefile 来编译 C/C++ 程序
三字符组
-
用于表示另一个字符的三个字符序列
-
从Microsoft Visual C++ 2010版开始,该编译器默认不再自动替换三字符组。
如果希望在源程序中有两个连续的问号,且不希望被预处理器替换,这种情况出现在字符常量、字符串字面值或者是程序注释中,可选办法是用字符串的自动连接:"...?""?..."或者转义序列:"...??..."。
数据类型
-
宽字符型 wchar_t
-
typedef short int wchar_t;
一些基本类型可以使用一个或多个类型修饰符进行修饰:
-
signed
-
unsigned
-
short
-
long
typedef
使用 typedef 为一个已有的类型取一个新的名字
枚举类型
enum 枚举名{
标识符[=整型常数],
标识符[=整型常数],
标识符[=整型常数]
} 枚举变量;
-
如果枚举没有初始化, 即省掉"=整型常数"时, 则从第一个标识符开始。
-
默认情况下,第一个名称的值为 0,第二个名称的值为 1
变量类型
-
C++ 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上
-
float : 单精度浮点值。单精度是这样的格式,1位符号,8位指数,23位小数。
-
double : 双精度浮点值。双精度是1位符号,11位指数,52位小数。
变量声明
-
变量定义就是告诉编译器在何处创建变量的存储以及如何创建变量的存储
-
不带初始化的定义:带有静态存储持续时间的变量会被隐式初始化为 NULL(所有字节的值都是 0),其他所有变量的初始值是未定义的。
-
变量声明向编译器保证变量以给定的类型和名称存在
-
变量声明只在编译时有它的意义,在程序连接时编译器需要实际的变量声明
-
当您使用多个文件且只在其中一个文件中定义变量时(定义变量的文件在程序连接时是可用的),变量声明就显得非常有用
-
可以使用 extern 关键字在任何地方声明一个变量
-
可以在 C++ 程序中多次声明一个变量,但变量只能在某个文件、函数或代码块中被定义一次
-
在函数声明时,提供一个函数名,而函数的实际定义则可以在任何地方进行。
变量作用域
有三个地方可以定义变量:
-
函数或一个代码块内部声明的变量,称为局部变量
-
函数参数的定义中声明的变量,称为形式参数
-
在所有函数外部声明的变量,称为全局变量
-
当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化
-
正确地初始化变量是一个良好的编程习惯,否则有时候程序可能会产生意想不到的结果
常量
-
常量是固定值,在程序执行期间不会改变,又叫做字面量
-
整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long),后缀可以是大写,也可以是小写
-
0x 或 0X 表示十六进制,0 表示八进制
-
常量以 L(仅当大写时)开头,则表示它是一个宽字符常量(例如 L'x')
-
字符常量可以是一个普通的字符(例如 'x')、一个转义序列(例如 '\t'),或一个通用的字符(例如 '\u02C0')
两种简单的定义常量的方式:
-
define 预处理器
-
const 关键字
C++ 中的类型限定符
-
volatile告诉编译器不需要优化volatile声明的变量,让程序可以直接从内存中读取变量。对于一般的变量编译器会对变量进行优化,将内存中的变量值放在寄存器中以加快读写效率。
-
restrict由 restrict 修饰的指针是唯一一种访问它所指向的对象的方式。只有 C99 增加了新的类型限定符 restrict。
C++ 存储类
-
存储类定义变量/函数的范围(可见性)和生命周期
-
auto
-
register
-
static
-
extern
-
mutable
-
thread_local (C++11)
从 C++ 17 开始,auto 关键字不再是 C++ 存储类说明符,且register 关键字被弃用。
auto
-
声明变量时根据初始化表达式自动推断该变量的类型
-
声明函数时函数返回值的占位符
register
-
register 存储类用于定义存储在寄存器中而不是 RAM 中的局部变量
-
变量的最大尺寸等于寄存器的大小
-
不能对它应用一元的 '&' 运算符(因为它没有内存位置
-
只用于需要快速访问的变量,比如计数器
-
不意味着变量将被存储在寄存器中,它意味着变量可能存储在寄存器中
static
-
指示编译器在程序的生命周期内保持局部变量的存在
-
使用 static 修饰局部变量可以在函数调用之间保持局部变量的值
-
static 修饰全局变量时,会使变量的作用域限制在声明它的文件内
-
static 用在类数据成员上时,会导致仅有一个该成员的副本被类的所有对象共享
extern
-
提供一个全局变量的引用,全局变量对所有的程序文件都是可见的
-
对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置
-
有多个文件且定义了一个可以在其他文件中使用的全局变量或函数时,可以在其他文件中使用 extern 来得到已定义的变量或函数的引用
-
extern 是用来在另一个文件中声明一个全局变量或函数
mutable
-
仅适用于类的对象,允许对象的成员替代常量。
-
mutable 成员可以通过 const 成员函数修改
thread_local
- 使用 thread_local 说明符声明的变量仅可在它在其上创建的线程上访问
网友评论