设为首页
收藏本站
切换到窄版
登录
立即注册
找回密码
搜索
搜索
本版
帖子
用户
快捷导航
论坛
BBS
C语言
C++
NET
JAVA
PHP
易语言
数据库
IE盒子
»
论坛
›
IE盒子
›
C++
›
C++中的const:位置和含义
返回列表
发帖
查看:
123
|
回复:
2
C++中的const:位置和含义
[复制链接]
浮生一日
浮生一日
当前离线
积分
23
7
主题
10
帖子
23
积分
新手上路
新手上路, 积分 23, 距离下一级还需 27 积分
新手上路, 积分 23, 距离下一级还需 27 积分
积分
23
发消息
发表于 2022-12-28 15:22:26
|
显示全部楼层
|
阅读模式
Prelude:
尽管const作为“constant”含义的关键字已经人尽皆知,但是其在不同的位置,修饰的含义和起到的效果亦有不同。
如若梳理不当,欢迎于评论区友善指出。
纲举:
“constant”意为
常量
,被这个东西修饰过的函数或者变量等,可以将其理解为博物馆展品的玻璃柜被加上了一把锁——
只能看不能动,只能读不能改。
目张:
我们再来看看在语法上可以怎么实现?
修饰变量或对象:
const在修饰变量类型的时候放在左侧,两种写法是等价的:
int const a= 5;
const int a= 5;(这个等价的特点我们随后在理解指针的时候会用到)
修饰类的成员函数:
修饰函数本身的时候,和符号final和override的位置一样,放在函数的左侧,比如:
Complex operator+(Complex &c2) const;//对于复数的重载加号函数,参考郑莉第五版C++P309下面
注意:
【含义上】这里const的含义是不会修改对象的数据成员,而不是修改函数本身
【与常对象关系】,常对象只会调用常函数,所以有些有经验的开发者会将同一个功能(前提是不改变数据成员的值)写两个函数:普通版本,和常函数版本
【与非成员函数】非成员函数不能用const修饰:
#include <bits/stdc++.h>
using namespace std;
void fun(int *p) const
{
*p=5;
}
int main()
{
int a=3;
int *p;
p =&a;
fun(p);
return 0;
}比如这段代码在编译的时候会出现这样的报错:
含义是非成员函数不能有cv 限定符,cv 限定符 c++有两个:const 和 volatile,这儿指const
在修饰返回值的时候,和返回值类型的位置一样,放在左侧(且在是返回值前面):
const int& fun(int& a);
修饰指针:
缘起于这样一道题:
上机跑了下之后:
的#include <bits/stdc++.h>
using namespace std;
int main()
{
char x=&#39;a&#39;;
const char *p;
p=&x;
*p=&#39;b&#39;;
cout << *p<<endl;
// char y=&#39;d&#39;;
// p=&y;
// cout<<*p<<endl;
// 这段是测试B选项的:改变其指向看看会不会报错
return 0;
}编译之后的报错是这样的:
看来const是修饰这个字符的
但是要修饰指针的话要怎么做到呢?
直到后来在网上找到了C++创始人Bjarne的一个助记的方法:
把一个声明从右向左读
。
如果把声明中的*读成“指向……的指针”的话,那末:
char * const p——p是恒常(const)的指向字符型的指针【p的指向不会改】
const char * p——p是指向常字符(const char)的指针【记得我们刚刚说的等价吗?这里就是p指向的字符不会改】
其实这个助记法也把前面函数的部分统一了起来:
声明一个(const:不改变数据成员的,final:不被覆盖的,override:是虚函数的)形参为……的函数,
返回(数据类型是……的,const:不被改变的)值
先写这么多吧
回复
使用道具
举报
不觉似水年华
不觉似水年华
当前离线
积分
23
3
主题
12
帖子
23
积分
新手上路
新手上路, 积分 23, 距离下一级还需 27 积分
新手上路, 积分 23, 距离下一级还需 27 积分
积分
23
发消息
发表于 2025-5-15 02:31:35
|
显示全部楼层
介是神马?!!
回复
使用道具
举报
郑自琴
郑自琴
当前离线
积分
15
1
主题
8
帖子
15
积分
新手上路
新手上路, 积分 15, 距离下一级还需 35 积分
新手上路, 积分 15, 距离下一级还需 35 积分
积分
15
发消息
发表于
昨天 02:11
|
显示全部楼层
楼猪V5啊
回复
使用道具
举报
返回列表
发帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
浏览过的版块
易语言
C语言
快速回复
返回顶部
返回列表