一、const关键字
const是C++语言中的一个关键字,它用来修饰一个变量,表示该变量的值不能被修改。const的作用是让变量只读,即不能再对该变量进行赋值,从而保证程序的安全性。
例如,下面的代码定义了一个const变量,并对该变量进行初始化,同时在试图修改该变量的值时,会出现编译错误:
const int MAX_VALUE = 100;
MAX_VALUE = 200; //error: assignment of read-only variable 'MAX_VALUE'
const关键字还可以用于函数的参数和返回值。用const修饰的参数表示该参数在函数内部不能被修改;用const修饰的返回值表示该返回值是只读的。
二、static关键字
static也是C++语言中的一个关键字,它可以修饰变量、函数和类。当它修饰一个变量时,该变量被称为静态变量,它的作用域在所在的文件中;当它修饰一个函数时,该函数被称为静态函数,它只能在当前文件中使用;当它修饰一个类的成员变量时,该成员变量被所有对象所共享。
2.1 静态变量
静态变量的生命周期从程序开始运行到结束,不同于一般的变量,其作用域仅限于当前文件。
#include <iostream>
using namespace std;
void foo()
{
static int a = 0;
a++;
cout << a << endl;
}
int main()
{
foo(); //1
foo(); //2
foo(); //3
return 0;
}
上面的代码演示了静态变量的使用方式,我们可以看到在执行foo函数时,a的值会累加,同时a的生命周期在程序退出时才会结束。
2.2 静态函数
静态函数与非静态函数不同,它只能在当前文件中使用。静态函数一般用于需要在当前文件中使用而不需要被其他文件调用的情况。
#include <iostream>
using namespace std;
static void foo()
{
cout << "This is a static function." << endl;
}
int main()
{
foo(); //This is a static function.
return 0;
}
上面的代码演示了静态函数的使用方式,我们可以看到在程序中直接调用foo函数即可,而不需要担心其他文件调用该函数。
2.3 静态成员变量
静态成员变量是指所有对象共享的变量。它与一般的成员变量不同,在编译时已经分配好了内存空间。静态成员变量必须在类的外部进行初始化。
#include <iostream>
using namespace std;
class Student
{
public:
Student(int id, string name)
{
m_id = id;
m_name = name;
s_count++;
}
void showCount()
{
cout << "Count:" << s_count << endl;
}
private:
int m_id;
string m_name;
static int s_count;
};
int Student::s_count = 0;
int main()
{
Student s1(1, "Tom");
s1.showCount(); //Count:1
Student s2(2, "Jerry");
s2.showCount(); //Count:2
return 0;
}
上面的代码演示了静态成员变量的使用方式,我们可以看到当每次新建一个Student对象时,静态成员变量s_count的值会累加。
三、const static的联合使用
const static通常用来定义常量。它是将const和static两个关键字一起使用。
一个应用场景是在类中定义常量,可以使用const static关键字:
#include <iostream>
using namespace std;
class Math
{
public:
static const double PI; //定义常量PI
};
const double Math::PI = 3.1415926535; //在类外进行初始化
int main()
{
cout << "PI:" << Math::PI << endl;
return 0;
}
上面的代码演示了在类中定义常量的使用方式。在定义时将常量设置为static const类型,然后在类外进行初始化,即可在程序中使用。
四、const static与内部连接
内部连接是指作用域限定在单个文件中的变量。const static修饰的变量默认情况下就是具有内部连接的。这意味着在不同的文件中定义同名的const static变量时,它们不会冲突,相当于定义了不同的变量。
//File1.cpp
#include <iostream>
using namespace std;
const static int NUM = 100;
void showNum()
{
cout << "NUM:" << NUM << endl;
}
//File2.cpp
#include <iostream>
using namespace std;
const static int NUM = 200;
void showNum();
int main()
{
showNum();
return 0;
}
上面代码演示了不同文件中定义同名const static变量的使用方式。我们可以看到在两个文件中定义了NUM变量,它们的值分别是100和200,在不同的文件中调用showNum函数,输出的结果也是不同的。
五、const static的应用场景
const static的应用场景非常广泛,主要用于以下几个方面:
5.1 定义常量
可以使用const static关键字定义常量。这种方式定义的常量可以被整个程序所使用,而且程序中所有使用该常量的地方都能够保证该常量的值不变。
5.2 累加器
可以使用静态变量来实现累加器的功能。因为静态变量的值不会被函数调用所改变,所以它可以保留上一次的值,然后加一。
5.3 共享数据
可以使用静态成员变量来实现共享数据的功能。静态成员变量被所有对象所共享,它们的值在所有对象中都是相等的。
5.4 静态函数
可以使用静态函数来定义只在当前文件中使用的函数。这种方式可以保护函数的安全性,也可以减少函数名对其他程序的命名空间的污染。
5.5 外部变量
可以使用内部连接的const static关键字来定义外部变量。定义的外部变量在不同的文件中具有不同的作用域和内存空间。这种方式可以避免同名变量的冲突。
原创文章,作者:SDRZC,如若转载,请注明出处:https://www.506064.com/n/334186.html