-
explicit
关键字:
在 C++ 中,explicit
是一个关键字,用于修饰类的单参数构造函数,其作用是防止隐式类型转换。当类的构造函数被声明为explicit
后,编译器将不再自动执行隐式类型转换,而是要求进行显式调用,从而避免了一些意外的类型转换问题。
示例:
class MyClass {
public:
explicit MyClass(int value) {
// Constructor code
}
};
int main() {
MyClass obj1 = 10; // 错误,因为构造函数是 explicit 的,不能进行隐式类型转换
MyClass obj2(10); // 正确,需要显式调用构造函数
MyClass obj3 = MyClass(10); // 正确,显式调用构造函数
return 0;
}
-
const
关键字:
const
是一个常用的关键字,用于声明常量或修饰函数参数和成员函数。它的作用如下:
- 声明常量:用于定义常量变量,一旦初始化后就不能再被修改。
- 修饰函数参数:在函数参数列表中,使用
const
修饰参数,表示函数内部不会修改该参数的值,这样可以增加函数的安全性和可读性。 - 修饰成员函数:用于修饰类的成员函数,表示该函数在执行过程中不会修改类的成员变量(除非成员变量本身也是
mutable
)。
示例:
class MyClass {
public:
int getValue() const { // const 成员函数
return value;
}
void setValue(int newValue) {
value = newValue;
}
private:
int value;
};
int main() {
const int myConstant = 10; // 声明常量
MyClass obj;
const MyClass constObj; // 声明一个 const 对象
obj.setValue(20); // 可以调用非 const 成员函数
int val = obj.getValue(); // 可以调用 const 成员函数
// const 对象只能调用 const 成员函数
int constValue = constObj.getValue(); // 正确
// constObj.setValue(30); // 错误,const 对象不能调用非 const 成员函数
return 0;
}
-
static
关键字:
static
是一个多用途的关键字,它的作用取决于它所用于的上下文。以下是static
关键字的不同用法和作用:
- 在类中的静态成员变量:类的静态成员变量是所有类的实例共享的,它们在内存中只有一份拷贝,并且可以在类的任何实例之间共享数据。
- 在类中的静态成员函数:类的静态成员函数不依赖于类的实例,因此它们没有
this
指针,只能访问类的静态成员变量和其他静态成员函数。静态成员函数可以通过类名直接调用,无需创建类的实例。 - 在局部变量中的静态变量:局部静态变量在函数内部定义,但它们的生命周期在整个程序执行期间保持不变,即使函数退出也不会被销毁,只会被初始化一次。
- 在全局变量中的静态变量:全局静态变量在整个程序执行期间都存在,但其作用域仅限于定义它的源文件,其他源文件无法访问它。
示例:
class MyClass {
public:
static int staticVar; // 静态成员变量声明
static void staticFunction() { // 静态成员函数定义
// do something
}
};
int MyClass::staticVar = 0; // 静态成员变量定义,需要在类外进行初始化
int main() {
MyClass::staticVar = 10; // 通过类名访问静态成员变量
MyClass::staticFunction(); // 通过类名调用静态成员函数
static int localVar = 5; // 局部静态变量
return 0;
}
注意:static
关键字在不同的上下文中有不同的作用和语义,因此在使用时需要根据具体的需求和语境合理使用。