const关键字的作用

发布时间:2024年01月17日
按照使用场景划分:

一、定义变量

? ? ?1、在C语言中,分为局部const、全局const。

? ? ?2、在C语言中,局部const位于栈区,可以通过指针修改变量值;全局const位于静态全局区,无法修改,如? 果修改会发生段错误。

#include<stdio.h>

const int a = 10;

void test() {
	const int m_b = 100; //伪常量。
	int *p = &m_b;
	*p = 200;
	printf("m_b: %d\n", m_b);
}

void test1() {
	int *p = &a;
	*p = 200;
	printf("a = %d\n", a);
}

int main()
{
    test();//运行结果 a = 200,局部const变量可以通过指针修改

    //test1(); //运行报错,全局const不可通过指针修改
    
    return 0;
}

? ? ? ?3、在C++中,全局const变量同样不能修改,const修饰的局部变量加载于符号表中,无法修改,但修改不会报错,只是修改不会生效。

#include<iostream>

using namespace std;

void test() {
	const int m_c = 100; 
	int *p = (int *)&m_c;
	*p = 200;
	cout <<"m_c = "<< m_c << endl;
}

int main()
{
	test(); //输出结果 m_c = 100
	return 0;
}

? 4、避免内存分配。

? 5、指针,有指针常量,常量指针

#include <stdio.h>

void test()
{
	// 指针常量,指针不能修改,但能修改指针指向的变量的值
	// 即能修改指针指向的空间中存储的数据
	char aptr, bptr;
	char *const ptr = &aptr;

	// ptr = &bptr;  报错,指针常量不可修改指针本身

	//常量指针,指针指向的空间存储的数据不可修改,但是指针本身可以修改
	const char *cptr = &aptr;
	cptr = &bptr;
}

int main()
{
	test(); 
	return 0;
}

二、修饰函数参数

? ? ?例如,在 func(const T &a){} 中,const的作用就是保证在这个函数中,a不能被修改

三、修饰函数返回值

? ? ? 例如,运算符重载,返回值不是作为左值存在的,不希望得到 a+b = c

class A
{
public:
	const A operator+(const A &a) // 返回值并不是作为左值存在的
	{
	}
};

四、类中常成员函数

#include <stdio.h>

class B
{
public:
	const int a = 100;
	const int b = 20;
	int c = 30;
	void func() const // 调用类中的常成员变量
	{
		printf("const class B\n");
	}

	void func()
	{
		printf("class B\n");
	}
};

int main()
{	
	B b;
	b.func(); // class B

	const B b1;
	b1.func(); // const  class B

	return 0;
}

输出结果

文章来源:https://blog.csdn.net/weixin_46126947/article/details/131905672
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。