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类型。

C++编程语言基础

C++的关键字列表