关键字
关键字:也称保留字,它是由C++语言本身预先定义好的一类单词
- 基本数据类型和布尔类型
int、float、double、char、bool:用于声明整型、浮点型、字符型和布尔型变量。
true、false:布尔类型的两个字面量值。 - 复杂数据类型与类
class:用于声明类,是C++面向对象编程的基础。
struct:类似于class,但默认为public访问级别。
union:一种特殊的类,允许在相同的内存位置存储不同的数据类型。
enum:枚举类型,用于定义变量的集合,使变量成为预定义标识符中的一个。
new、delete:用于动态分配和释放内存。
this:指向当前对象的指针,常用于成员函数内部。 - 函数与控制流
return:用于从函数中返回值。
if、else、switch、case、default:用于条件判断和分支控制。
for、while、do-while:用于循环控制。
break、continue、goto:用于改变控制流。 - 模板与泛型编程
template:用于声明模板类或模板函数,支持泛型编程。
typename:在模板编程中,作为类型前的关键字,用于指示一个依赖的类型名。 - 命名空间与模块
namespace:用于声明命名空间,避免命名冲突。
using:用于引入命名空间中的成员,简化代码。 - 继承与多态
public、protected、private:访问控制关键字,用于控制成员和继承的访问级别。
virtual:用于声明虚函数,支持多态性。
override、final:C++11新增,分别用于显式指定函数重写和禁止类被继承。 - 异常处理
try、catch、throw:用于异常处理,try块中可能抛出异常的代码,catch块用于捕获并处理异常,throw用于抛出异常。
noexcept:C++11新增,用于指定函数是否抛出异常,优化异常处理性能。 - 其他关键字
static:用于声明静态变量或静态成员函数。
const:用于声明常量,表示值不可变。
volatile:表示变量的值可能会在程序外部被改变。
extern:用于声明在其他文件中定义的变量或函数。
sizeof:计算类型或变量在内存中的大小。
typeid、dynamic_cast、static_cast、const_cast、reinterpret_cast:用于类型识别和类型转换。
constexpr:C++11新增,用于声明编译时常量表达式。
nullptr:C++11新增,用于表示空指针常量,比NULL更安全。
alignas、alignof:C++11新增,用于指定对齐要求和获取类型或变量的对齐要求。
decltype:C++11新增,用于在编译时推断表达式的类型。
thread_local:C++11新增,用于声明线程局部变量。
标识符
是用户为程序中各种需要命名的“元素”所起的名字。这些元素包括:变量、符号、常量、函数、函数的参数、结构、类、对象等。
标识符的命名规则:
- 标识符以一个字母或下划线开头的,由字母、数字、下划线组成的字符串
- 不能与任意一个关键字同名
- 标识符中的字母区分大小写
- 标识符不宜过长,虽然C++语言不限制标识符的长度,但多数编译器只识别前32个字符(或更少)
常量
常量是值在程序执行期间不能被修改的数据。它们可以是整数、浮点数、字符、字符串等任何基本数据类型,或者是用户定义的类型(如结构体、类等)。使用常量可以使程序更加健壮,因为可以防止在不应该修改数据的情况下意外地修改数据。
定义常量的几种方式:
- 使用#define预处理器
define是C++(以及C)中定义常量的传统方式,但它实际上是在预处理阶段进行的文本替换,并不具有类型安全。
#define PI 3.14159
- 使用const关键字
const关键字用于声明常量,它可以提供类型检查,是C++中定义常量的首选方式。
const double pi = 3.14159;
const常量可以在声明时初始化,之后其值就不能被修改了。
- 使用constexpr关键字(C++11及以后)
constexpr关键字用于声明编译时常量表达式,即在编译时就能计算出其值的常量表达式。使用constexpr定义的常量可以用在需要常量的任何编译时上下文中,包括数组大小、模板参数等。
constexpr double Pi = 3.14159;
与const相比,constexpr变量必须是一个常量表达式,即它的值必须在编译时就能确定。
- 枚举类型(Enum)
枚举类型也可以用于定义常量,但它主要用于定义一组命名的整型常量。
enum Color {RED, GREEN, BLUE};
默认情况下,枚举成员的值从0开始递增,但也可以显式指定它们的值。
注意事项:
- const和constexpr变量必须在声明时初始化。
- constexpr变量必须是编译时常量表达式,而const变量可以是运行时常量(即其值在编译时未知,但在运行时不会改变)。
- 使用#define定义的常量没有类型,而const和constexpr定义的常量具有明确的类型,这有助于提供类型安全检查。
- 枚举类型是一种特殊的类型,用于定义一组命名的整型常量,它在某些情况下比#define或const更加清晰和方便。