C++的关键字列表
C++的关键字列表:
asm, auto, bool, break, case, catch, char, class, const, const_cast, continue, default, delete, do, double, dynamic_cast, else, enum, explicit, export, extern, float, for, friend, goto, if, inline, int, long, mutable, namespace, new, operator, private, protected, public, register, reinterpret_cast, return, short, signed, sizeof, static, static_cast, struct, switch, template, this, throw, try, typedef, typeid, typename, union, unsigned, using, virtual, void, volatile, wchar_t, while, FALSE, TRUE
一、基础类型相关关键字
1. int
用于定义整数类型变量,是最常用的基本数据类型之一,通常在32位系统中占用4个字节。例如:int num = 10;。
2. float
表示单精度浮点数类型,用于存储带有小数部分的数值,精度相对较低。例如:float pi = 3.14f;(注意这里的f后缀,表示单精度浮点数常量)。
3. double
定义双精度浮点数类型,比float能表示更高的精度,在没有明确指定类型时,浮点数常量默认是double类型。例如:double num = 3.1415926;。
4. char
用来声明字符类型的变量,其值对应ASCII码表中的字符,字符常量需要用单引号括起来。例如:char c = 'a';。
5. bool
布尔类型,只能取true或false两个值,常用于条件判断。例如:bool flag = true;。
6. wchar_t
宽字符类型,用于表示更广泛的字符集,通常用于处理Unicode字符。例如:wchar_t wideChar = L'A';(这里的L前缀表示宽字符常量)。
7. char16_t
16位的字符类型,用于表示Unicode字符集中的字符。例如:char16_t unicodeChar = u'A';(u前缀表示16位Unicode字符常量)。
8. char32_t
32位的字符类型,用于表示Unicode字符集中的字符。例如:char32_t wideUnicodeChar = U'A';(U前缀表示32位Unicode字符常量)。
二、存储类关键字
1. auto
在C++11及以后版本中,用于自动类型推断。编译器会根据变量的初始化表达式自动确定变量的类型。例如:auto num = 10;(这里num会被推断为int类型)。
2. register
建议编译器将变量存储在CPU寄存器中以提高访问速度,但这只是一个提示,编译器可能不会完全按照要求执行。例如:register int fastAccess;。
3. static
有多种用途。当用于函数内部变量时,使得变量在函数调用结束后仍然保留其值;当用于函数或全局变量时,表示内部链接性。例如:
局部静态变量:
void myFunction() { static int count = 0; count++; std::cout << count << std::endl; }
静态函数:
static int myStaticFunction() { return 10; }
4. extern
用于声明变量或函数为外部链接,表明该变量或函数定义在其他源文件中。例如:extern int globalVar;。
5. thread_local
在C++11中引入,用于声明线程局部存储。每个线程都有自己独立的变量副本。例如:thread_local int threadVar;。
三、控制流关键字
1. if、else
用于条件判断,根据条件表达式的值决定执行哪部分代码。例如:
int num = 10; if (num > 5) { std::cout << "Greater than 5" << std::endl; } else { std::cout << "Less than or equal to 5" << std::endl; }
2. switch、case、default
switch根据表达式的值选择执行多个分支中的一个;case定义每个分支的匹配值;default在没有匹配的case时执行。例如:
int choice = 2; switch (choice) { case 1: std::cout << "Option 1" << std::endl; break; case 2: std::cout << "Option 2" << std::endl; break; default: std::cout << "Other option" << std::endl; }
3. for
用于创建循环结构,常用于已知循环次数的情况。例如:
for (int i = 0; i < 5; i++) { std::cout << i << " "; }
4. while
根据条件表达式的值决定是否执行循环体中的代码。例如:
int num = 0; while (num < 5) { std::cout << num << " "; num++; }
5. do - while
与while类似,但循环体至少会执行一次。例如:
int num = 0; do { std::cout << num << " "; num++; } while (num < 5);
6. break
用于立即跳出for、while、do - while或switch循环。例如:
for (int i = 0; i < 10; i++) { if (i == 5) { break; } std::cout << i << " "; }
7. continue
跳过当前循环体的剩余部分,直接进入下一次循环。例如:
for (int i = 0; i < 10; i++) { if (i == 5) { continue; } std::cout << i << " "; }
8. goto
无条件跳转到程序中的指定标签处。虽然它可以实现一些特殊的控制流,但过度使用会使程序难以理解和维护。例如:
int num = 0; start: num++; if (num < 5) { goto start; }
四、函数相关关键字
1. inline
用于声明内联函数,内联函数的函数体在编译时会在调用处展开,以减少函数调用的开销,但如果函数体过大,编译器可能会忽略inline关键字。例如:
inline int add(int a, int b) { return a + b; }
2. virtual
在面向对象编程中,用于声明虚函数,实现多态性,允许子类重写父类的函数。例如:
class Base { public: virtual void myFunction() { std::cout << "Base class function" << std::endl; } };
3. override
在C++11及以后版本中使用,明确表示子类中的函数是对父类中虚函数的重写。例如:
class Derived : public Base { public: void myFunction() override { std::cout << "Derived class function" << std::endl; } };
4. final
在C++11及以后版本中使用,用于禁止子类重写父类的虚函数,或者禁止类被继承。例如:
class Base final { public: void myFunction() { std::cout << "Base class function" << std::endl; } };
五、类与对象相关关键字
1. class
用于定义类,类是面向对象编程的基本构建块,包含数据成员和成员函数。例如:
class MyClass { public: int myVariable; void myFunction() { std::cout << "MyClass function" << std::endl; } };
2. struct
与class类似,也用于定义类类型,但默认情况下,struct中的成员是公共的,而class中的成员是私有的。例如:
struct MyStruct { int myVariable; };
3. public、private、protected
用于控制类成员的访问权限。public成员可以在类的外部访问;private成员只能在类的内部访问;protected成员在类的内部和子类中可以访问。例如:
class MyClass { public: int publicVariable; private: int privateVariable; protected: int protectedVariable; };
4. this
在类的成员函数中,this指针指向调用该函数的对象本身,可用于访问对象的成员变量和成员函数。例如:
class MyClass { public: int myVariable; void setVariable(int value) { this->myVariable = value; } };
5. friend
用于声明友元关系,友元可以访问与其有friend关系的类中的私有或受保护的成员。例如:
class MyClass { private: int privateVariable; friend void myFriendFunction(MyClass& obj); }; void myFriendFunction(MyClass& obj) { obj.privateVariable = 10; }
六、异常处理关键字
1. try、catch、throw
try块中包含可能抛出异常的代码;catch块用于捕获并处理异常;throw用于抛出异常。例如:
try { int num = 1/0; } catch (...) { std::cout << "An error occurred" << std::endl; }
2. noexcept
在C++11及以后版本中使用,指示函数不抛出异常,编译器可以根据此信息进行优化。例如:
void myFunction() noexcept { // 函数体 }
七、类型转换和定义相关关键字
1. const
用于定义常量,被const修饰的对象或变量不能被修改。也可用于修饰函数,表示函数不会修改对象的状态。例如:
const int num = 10; class MyClass { public: int myVariable; void myFunction() const { // 函数体,不能修改非 - mutable成员变量 } };
2. const_cast
用于去除变量的const或volatile属性。例如:
const int num = 10; int* nonConstPtr = const_cast<int*>(&num);
3. typedef
用于为已有的类型定义一个新的名称。例如:typedef int MyInt;,之后就可以用MyInt来代替int类型。
4. dynamic_cast
在运行时进行类型转换,主要用于多态类型的转换,转换失败时返回nullptr(对于指针类型)或抛出std::bad_cast异常(对于引用类型)。例如:
class Base { public: virtual void myFunction() {} }; class Derived : public Base {}; Base* basePtr = new Derived; Derived* derivedPtr = dynamic_cast<Derived*>(basePtr);
5. reinterpret_cast
进行低级别的类型转换,这种转换可能会改变数据的解释方式,应谨慎使用。例如:
int num = 10; float* floatPtr = reinterpret_cast<float*>(&num);
6. alignas
在C++11及以后版本中使用,用于指定对象的对齐方式。例如:alignas(16) int myArray[10];。
7. alignof
在C++11及以后版本中使用,用于返回类型的对齐要求。例如:std::cout << alignof(int) << std::endl;。
8. constexpr
在C++11及以后版本中使用,用于在编译时计算常量表达式。例如:constexpr int num = 5 * 2;。
9. consteval
在C++20及以后版本中使用,指定在编译时求值的函数。例如:consteval int myFunction() { return 5 * 2; }。
10. constinit
在C++20及以后版本中使用,指定变量在编译时初始化。例如:constinit int num = 10;。
11. concept
在C++20及以后版本中使用,用于定义概念,以约束模板参数。例如:
template <typename T> concept MyConcept = requires(T t) { t.myFunction(); };
12. requires
在C++20及以后版本中使用,与concept一起定义模板要求或约束。例如:
template <typename T> requires MyConcept<T> void myTemplateFunction(T t) { // 函数体 }
13. decltype
在C++11及以后版本中使用,用于查询表达式的类型。例如:decltype(5 + 3) num;,这里num会被推断为int类型。