C++之const关键字的基本使用
Posted 你是小KS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++之const关键字的基本使用相关的知识,希望对你有一定的参考价值。
1.声明
当前内容主要理解C++的const的使用和学习
主要涉及
- 使用const修饰的变量
- 使用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)!
总结以上
- const修饰指针时,如果*在const的左边,即指针不可变,值可变
- const修饰指针时,如果*在const的右边,即指针可变,值不可变
- 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;
}
总结如下
const放在返回值左边时,返回的是const 变量类型*,即指针可变,值不变
const放在方法参数的)的右边是,返回的是变量类型* const,即指针不可变,值可变!
以上是关于C++之const关键字的基本使用的主要内容,如果未能解决你的问题,请参考以下文章
我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情