新闻

新闻动态

良好的口碑是企业发展的动力

const和static区别

发布时间:2024-02-10 08:22:44 点击量:79
网页模板

 

const和static是C++中的两个关键字,用于修饰变量或函数。它们的作用不同,下面将详细介绍它们之间的区别。

 

1. const关键字:

const常量是指一旦被定义后,就不能被修改的变量。声明const时,一般要同时进行初始化,以确保其值在定义后就固定不变。

 

a) 使用const修饰变量:

const可以用来修饰任何类型的变量,包括基本数据类型(如int、float)和用户定义的类型(如类对象)。声明为const的变量一般采用全大写的命名风格,以提醒程序员该变量是常量。

 

例如:

const int MAX_VALUE = 100;

 

b) 被const修饰的变量是只读的:

被const修饰的变量在初始化后就不能再被修改,否则编译器会报错。

 

例如:

const int MAX_VALUE = 100;

MAX_VALUE = 200; // 错误,不能修改const变量的值

 

c) 编译期常量:

将const修饰的变量用于表达式中时,编译器可以在编译期间进行常量替换,以提高程序的执行效率。

 

例如:

const int MAX_VALUE = 100;

int arr[MAX_VALUE]; // 编译器可以知道MAX_VALUE的值是100,并在编译时创建一个大小为100的数组

 

d) const的作用域:

const变量的作用域与普通变量相同,即在定义所在的作用域内有效。

 

e) const引用:

const引用是指对const修饰的对象进行引用,保证在引用过程中通过引用无法修改对象。

 

例如:

const int& ref = 100;

ref = 200; // 错误,不能通过const引用修改引用对象的值

 

f) const成员函数:

const成员函数是指在类中修饰成员函数的const关键字,表示该成员函数不会修改类的成员变量。

 

例如:

class MyClass {

public:

void print() const {

cout << "This is a const member function." << endl;

}

void modify() {

value = 10; // const成员函数可以调用非const成员函数,修改成员变量的值

}

private:

int value;

};

 

2. static关键字:

static的作用与const不同,它可以应用于变量、函数和类成员,并有不同的含义。

 

a) 使用static修饰变量:

static修饰的变量称为静态变量,该变量在程序的生命周期内只会被初始化一次,并在全局范围内有效。静态变量的生命周期与程序的运行时间相同。

 

例如:

static int count = 0;

 

b) 静态局部变量:

在函数内部定义的static变量称为静态局部变量,它与普通局部变量不同,静态局部变量的值在函数调用结束后仍然保持不变。

 

例如:

void foo() {

static int num = 0;

num++;

cout << num << endl;

}

 

c) 使用static修饰函数:

static修饰的函数称为静态函数,该函数只能在当前文件中使用,无法被其他文件调用。

 

例如:

static void print() {

cout << "This is a static function." << endl;

}

 

d) 使用static修饰类成员:

static修饰的类成员(包括变量和成员函数)在类的所有对象中是共享的,它们只会被初始化一次,并在内存中独立于任何对象。

 

例如:

class MyClass {

public:

static int count;

static void print() {

cout << count << endl;

}

};

int MyClass::count = 0; // 静态成员变量的初始化

 

e) 静态成员函数:

静态成员函数是指被static修饰的成员函数,它们在类的对象上进行操作而不需要实例化对象。

 

例如:

class MyClass {

public:

static void print() {

cout << "This is a static member function." << endl;

}

};

MyClass::print(); // 调用静态成员函数

 

总结:

1. const用于定义常量,被const修饰的变量是只读的,值在定义后就固定不变。

2. static用于定义静态变量、函数和类成员,静态变量在程序生命周期内只会被初始化一次,静态成员在类的所有对象中是共享的。

3. const修饰的变量值在编译期就确定,可以用于常量表达式;static修饰的变量值在运行时确定,可以用于全局变量和局部变量。

4. const修饰的函数表示不会修改类的成员变量,static修饰的函数在类的所有对象中共享,可以直接通过类名调用。

5. const成员函数可以调用非const成员函数,但反过来不行。

6. const引用可以指向const和非const对象,而非const引用只能指向非const对象。

 

总的来说,在C++中,const用于修饰常量,使其值不变,而static用于修饰变量和函数,使其具有静态的特性,并与类或对象进行关联。

免责声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,也不承认相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,请发送邮件至:dm@cn86.cn进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。本站原创内容未经允许不得转载。
上一篇: git rm -r --cached
下一篇: golang switch case