结构体中 const 使用场景
当我们看到const
的时候,这表示限制为只读,用来防止误操作。
在使用函数的时候,如果是值传递,那么每一个数据都会复制一份。这样数据量会非常大。如果我们使用地址传递,那么会减少占用的空间。(因为指针只占用 8 个字节(或者 4 个字节))。
但是使用地址传递会有一个隐患:因为传递的是地址,所以如果在函数内修改了数据,那么实际参数也会被修改!!!
例子:这是没有使用const
修饰
#include <iostream>
#include <string>
using namespace std;
//const 使用场景
struct stu
{
string name;
int age;
int scores;
};
void printf(struct stu* a);
int main()
{
struct stu s;
s.name = "张三";
s.age = 15;
s.scores = 750;
printf(&s);
cout << s.name << endl;
cout << s.age << endl;
cout << s.scores << endl;
system("pause");
return 0;
}
void printf(struct stu* a)
{
a->age = 100;
cout << a->name << endl;
cout << a->age << endl;
cout << a->scores << endl;
}
因为在函数里面出现了这样一句:a->age = 100
。所以实际参数也被修改了。下面是运行结果(环境:Windows11 (arm/Apple M VM)/Visual Studio 2022/Debug/arm64)
张三
100
750
张三
100
750
请按任意键继续. . .
但是我们在函数声明的时候添加const
比如这样:void printf(const struct stu* a);
那么在函数里面修改数据的时候就会报错。修改后代码如下
#include <iostream>
#include <string>
using namespace std;
//const 使用场景
struct stu
{
string name;
int age;
int scores;
};
void printf(const struct stu* a);
int main()
{
struct stu s;
s.name = "张三";
s.age = 15;
s.scores = 750;
printf(&s);
system("pause");
return 0;
}
void printf(const struct stu* a)
{
cout << a->name << endl;
cout << a->age << endl;
cout << a->scores << endl;
}
在添加const
之后,只要出现修改的操作,那么就会报错。
总结:
- 使用指针:减少内存占用
- 使用
const
:保护原始数据不被修改。
:-)