C++之const关键字的基本使用

Posted 你是小KS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++之const关键字的基本使用相关的知识,希望对你有一定的参考价值。

1.声明

当前内容主要理解C++的const的使用和学习

主要涉及

  1. 使用const修饰的变量
  2. 使用const修饰的函数

2.使用const修饰的变量

1.一个类似:变量类型* const 变量名称=指针;(个人称之为地址可变,值不可变)

由于变量类型后面带了*,就是指针了,所以接收一个指针类型

const int* u; 
const int p = 1;
const int w = 2;
u = &p;
std::cout << "&u=" << u << ",u=" << *u << std::endl;
u = &w;
std::cout << "&u=" << u << ",u=" << *u << std::endl;

这个例子中编译不会报错,并且正常修改了地址

&u=0xb7fdbc,u=1
&u=0xb7fdb8,u=2

但是如果将*u进行赋值操作就会报错

*u=5;

在这里插入图片描述
所以得到结论:const修饰的指针变量,指针(u)可改,内容(*u)不可改

2.一个类似:const 变量类型 变量名称=值;或者类似:变量类型 const 变量名称 = 值;

即当前的没有指针(*)的并使用const修饰的变量都是常量(地址不可变,值不可变)

const int constVal = 6;
//constVal = 6; 	错误
//constVal = 7;		错误
int const constP2 = 10;
/*constP2=3;*/ //错误
int const *mo1 = &constP2;
const int* mo2 = &constP2;
// *mo1=9; // 错误只读
// *mo2=9;// 错误只读

并且如果获取该常量的指针会得到const int* 类型的变量(这个变量就是无法通过反解方式去设置值的上面有)

所以这个const修饰非指针变量的时候是地址和值都是无法改变的!

3.一个类似:变量类型* const 变量名称 = 指针;,称之为指针不可变(即必须要初始化时指定指针,指针地址不可变,值可变)

int num1 = 9;
int num2 = 10;
int* const constP = &num1; // 这个才是指针常量
std::cout << "&constP=" << constP << ",constP=" << *constP << std::endl;

*constP = 999;  // 这个是可以改变值的,表示指针的地址不变,但是值是可以改变的
std::cout << "&constP=" << constP << ",constP=" << *constP << std::endl;

// constP=&num2; // assignment of read-only variable 'constP',一个只读的

得到结论:指针(constP)不可变,值可变(*constP)!

总结以上

  1. const修饰指针时,如果*在const的左边,即指针不可变,值可变
  2. const修饰指针时,如果*在const的右边,即指针可变,值不可变
  3. const不修饰指针时,值和指针都不可变

3.使用const修饰class中的函数

#include<iostream>

class B1C804_Test {
public:
	const char* getContent(); // 返回一个指针(普通指针),可以修改
	char* getText() const; // 返回一个指针常量(指针不可变),不可重新指向
};

// 开始为当前的B1C804_Test绑定对应的方法
const char* B1C804_Test::getContent() {
	//const char* content = "这是getContent函数返回的内容!";
	char* content = "这是getContent函数返回的内容!";
	return content;
}

char* B1C804_Test::getText() const {
	// char* text = "这是getText函数返回的内容!";	// 这个也是可以的
	// const char* text = "这是getText函数返回的内容!"; 这个地方报错,原因返回的类型不是const char*
	char* const text = "这是getText函数返回的内容!"; //这个也是可以的
	return text;
}
int main/*B1C804*/(int argc, char **argv) {
	B1C804_Test test;
	const char* content = test.getContent();
	std::cout << "content=" << content << std::endl;
	content = "123456";
	std::cout << "content=" << content << std::endl;
	char* const text = test.getText();
	std::cout << "text=" << text << std::endl;
	// 这个地方是无法改变的,返回的是一个常量地址,地址不可变
	// text="123456"; 这里报错 //assignment of read-only variable 'text'
	return 0;
}


总结如下

  1. const放在返回值左边时,返回的是const 变量类型*,即指针可变,值不变
  2. const放在方法参数的)的右边是,返回的是变量类型* const,即指针不可变,值可变!

以上是关于C++之const关键字的基本使用的主要内容,如果未能解决你的问题,请参考以下文章

inline内联函数

C++中const关键字的使用总结

const关键字到底该怎么用

《c++ const 详细总结》--转载

关于C++ const 的全面总结

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情