0%

C++常用关键字

  • auto: 用于自动类型推断,让编译器根据变量的初始化表达式推导出其类型。
  • const: 声明常量,使得变量的数值在初始化后不能被修改。
  • constexpr: 用于声明常量表达式,使得函数或变量在编译期间就能被计算出来。
1
2
3
4
5
6
7
8
9
10
11
12
constexpr int size = 10; // 声明常量

constexpr int square(int x) { // 声明函数
return x * x;
}

class MyClass { // 声明类的构造函数,在编译期间初始化对象
public:
constexpr MyClass(int x) : data(x) {}
private:
int data;
};
  • static: 声明静态变量或函数,使得它们在程序的整个生命周期内保持其存在,即使超出了其定义的作用域。
  • volatile: 告知编译器,某个变量的值可能会在程序的执行过程中被意外地改变,应该禁止对其进行某些优化。
  • extern: 声明一个变量或函数是在其他文件中定义的,使得在当前文件中可以引用它。
  • mutable: 用于声明类的成员变量,在const成员函数中允许修改这些变量。
1
2
3
4
5
6
7
8
9
10
11
class person
{
int m_A;
mutable int m_B;//特殊变量 在常函数里值也可以被修改
public:
void add() const//在函数里不可修改this指针指向的值 常量指针
{
m_A = 10;//错误 不可修改值,this已经被修饰为常量指针
m_B = 20;//正确
}
};
  • inline: 声明函数为内联函数,建议编译器在调用时将函数体直接插入到调用处,以减少函数调用的开销。
1
2
3
4
5
6
7
inline int add(int a, int b) {
return a + b;
}
int main() {
int result = add(3, 4);
return 0;
}
  • explicit : 用于修饰单参数的构造函数,防止隐式类型转换发生。
1
2
3
4
5
6
7
8
9
10
11
class MyClass {
public:
explicit MyClass(int x) : data(x) {}
private:
int data;
};
int main() {
MyClass obj = 10; // 错误,因为构造函数是explicit的
MyClass obj2(10); // 正确
return 0;
}
  • virtual: 声明虚函数,用于实现多态性,在派生类中可以重写基类的虚函数。
  • override: 用于在派生类中标记重写基类的虚函数。
1
2
3
4
5
6
7
8
9
10
11
12
class A{
public:
virtual void foo(){
cout << "father" << endl;
};
}
class B : public A{
public:
void foo() override{
cout << "son override" << endl;
};
}
  • final: 用于标记类不能被继承,或者虚函数不能被重写。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Base{
public:
virtual void foo();
};

class A : public Base{
public:
void foo() final; // foo 被override并且是最后一个override,在其子类中不可以重写
};

class B final : A // 指明B是不可以被继承的
{
public:
void foo() override; // Error: 在A中已经被final了
};

class C : B // 错误
{
};
  • nullptr: 表示空指针常量。
  • typename: 用于告知编译器某个名称是类型而不是变量。
  • try/catch/throw: 用于异常处理的关键字。
  • namespace: 声明命名空间,用于避免命名冲突。