C++的主要优势:
- C++语言与C语言具有高度兼容性,能够无缝衔接C语言代码。
- 通过引入面向对象的特性,显著提升了代码的可读性和可维护性。
- 程序执行效率极高,其性能仅比汇编语言慢10%至20%,展现出强大的计算能力。
- 具备良好的代码重用机制,支持模块化设计,便于系统扩展和长期维护,同时保证了代码的可靠性。
命名空间机制
C++语言通过引入命名空间(namespace)机制,为程序员提供了自定义作用域的能力,有效解决了命名冲突问题。
- 其中,std命名空间是C++标准类库的专属命名空间,包含了所有标准库中定义的各类实体名称。
- 在程序中使用using namespace std语句时,相当于将std命名空间中的所有实体名称导入当前作用域,简化了代码书写。
- 命名空间的定义格式如下:
namespace 名字空间名称
{
// 声明或定义成员
};
- 命名空间的使用方式主要有三种:
- 通过作用域解析符访问:名字空间名称::局部内容名
- 导入整个命名空间:using namespace 名字空间名称;
- 导入特定实体:using 名字空间名称::局部内容名;
基本数据类型与修饰符
类型修饰符的应用
- signed:用于修饰有符号整数类型,表示该类型可以存储正负数值。
- unsigned:用于修饰无符号整数类型,仅能存储非负数值。
- short:表示短整数类型,其存储范围小于标准整数类型。
- long:表示长整数类型,其存储范围通常大于标准整数类型。
以上修饰符均可应用于整数类型和字符类型。
- signed修饰的类型可以取正负值。
- unsigned修饰的类型仅能取非负值。
- short修饰的类型值不超过对应标准整数类型的范围。
- long修饰的类型值不小于对应标准整数类型的范围。
标识符的命名规则
- 标识符的首字符必须是字母或下划线,C++将下划线视为字母。
- 以下关键字不能作为标识符:
关键字列表
常量与变量的区别
- 字面值常量的类型和表示方式:
- 十进制整数:如10
- 八进制整数:以0开头,如025
- 十六进制整数:以0x或0X开头,如0xA2
- 字符常量:单引号括单字符如’a’,双引号括字符串如”a”
- 浮点数:小数形式如3.1415或科学计数法如3.12E3
- 布尔常量:true或false
- 指针常量:nullptr
- 常量的定义方式:
- 字面值常量
- #define 宏定义
- const数据类型 常量名=常量值
- 变量的修饰符:
- volatile:表示该变量的值可能随时被改变
- register:建议编译器将变量存储在寄存器中以提高访问效率
- static:在文件作用域中声明时表示局部静态变量,在函数作用域中声明时表示持久变量
- extern:表示变量已在其他文件中定义
- auto:表示自动变量(现基本被废弃)
- 当为多个变量赋相同初值时,需分别指定每个变量
- 访问隐藏的全局变量:通过作用域解析符::指定变量所属文件的作用域
- 指针与常量的关系:
- 指向常量的指针可以指向常量或变量,但自身不是常量
- const int c = 10;
- const int *p = &c; // 正确
- int *p = &c; // 错误,常量只能被指向常量的指针或常量指针指向
- 指向常量的指针可以改变指向,但不能改变所指向变量的值
- 常量指针:指向地址后不可改变
- const int *const p = &c; // 一旦指向后不可改变
- 当指向变量时,可以修改该变量的值
- 关于bool类型:
- boolalpha:控制逻辑值以true/false输出
- noboolalpha:控制逻辑值以1/0输出
- 无名联合体:一组变量共享同一内存空间
- void指针:通用型指针,可接收任何类型指针,但使用时需显式类型转换
运算符与表达式
数据类型转换规则
数据类型转换分为显式和隐式两种形式
隐式类型转换
- 函数参数传递时自动转换
- 表达式计算时自动转换
显式类型转换
- C语言风格:(目标类型名)待转换源数据
- C++风格:目标类型名(待转换源数据)
- 类型转换方向:通常由低精度向高精度转换,反向转换可能导致精度损失
输入输出格式控制
头文件依赖
需包含iomanip.h头文件
setw函数说明
setw(n)仅影响下一个数值输出格式