C++ const用法

1、const指针位于*的左边
const 修饰指针指向的内容, 则内容为不可变量但指针可变;
const int * p; //指向整形常量的指针,它所指向(的变量)的值不可以更改
int const * p;
2、const指针位于 * 的右边
const 修饰指针, 则指针为不可变量; 可以改变值, 但不能改变地址
int const p; //指向整形的常量指针 ,它不能再指向别的变量(p的值不能改变),但指向(的变量)的值可以修改。
3、const指针位于 * 的两边
cosnt修饰指针和指针指向的内容, 则指针和指针指向的内容都为不可变量;
  左定值, 右定向, const修饰不变量
const int * const p; 指向整形常量的常量指针,它既不能再指向别的常量,指向的值也不能进行修改。
(1)(int
)a和int*a的区别

不一样。(int*)a将指针变量a强制转换为整型指针,说明a一般不是一个整型指针,也可以是个整型指针。int*a,定义一个整型指针变量a
2.const用于函数的地址传递参数,修饰函数的参数

void foo(const int *p);
相当于函数调用者声称:“我给你一个指向它的指针,但你不能去修改它。”
用来限定函数的形参,这样该函数将不会修改实参指针所指的数据。
是函数不应该去修改而不是不能修改,也就是说const不能阻止参数的修改。

3.const修饰函数的返回值
const int foo();
上述写法限定函数的返回值不可被更新,当函数返回内部的类型时,已经是一个数值,当然不可被赋值更新。
所以,此时const无意义,最好去掉,以免困惑。

如果给以“指针传递”方式的函数返回值加上const修饰,那么函数返回值(即指针指向)的内容不能被修改。
该返回值只能被赋给加const修饰的同类型指针。例如:
const char * GetString(void);
如下语句将出现编译错误:
char *str = GetString();
正确的用法是
const char *str = GetString();
const struct mytype foo();
当函数返回自定义的类型时,这个类型仍然包含可以被赋值的变量成员,所以,此时有意义。
4.const修饰成员函数
关于const函数的几点规则:
a. const对象只能访问const成员函数,而非const对象可以访问任意的成员函数,包括const成员函数。
b. const对象的成员是不可修改的,然而const对象通过指针维护的对象却是可以修改的。#include
c. const成员函数不可以修改对象的数据,不管对象是否具有const性质。它在编译时,以是否修改成员数据为依据,进行检查。
d. 然而加上mutable修饰符的数据成员,对于任何情况下通过任何手段都可修改,自然此时的const成员函数是可以修改它的。

#include<iostream>

using namespace std;

int main(int argc, char *argv[])
{
	int a=3;
	int b;
	
	//定义指向整形const(常量)的指针,即指针指向的内容不可修改
	const int * p1;
	int const * p2;
	
	//定义const(常量)指针,由于该类指针本身的值不能改变所以必须得初始化 
	int *const p3 = &a;
	
	//常量指针及它所指向的整形常量都是不能改变的,所以也要初始化。
	const int * const p4 = &a;
	int const * const p5 = &b;
	
	p1=p2=&a;  //正确
	
	//试图改变指针指向的整形常量? 
//	*p1=*p2=8;  // 错误(指针指向的内容不能被修改)
	cout<<*p1<<endl;
	
	*p3=5;   //正确
//	p3 = p1;  非法操作 
//  p4 = p4;  非法操作
//  *p4 = *p5 =9;  非法操作 
	
	cout<<*p1<<endl;
	cout<<*p4<<endl;
	cout<<*p5<<endl;
	return 0; 
}

参考链接:https://www.cnblogs.com/lihuidashen/p/4378884.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值