问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C++中const限定符的几种常见用法

发布网友 发布时间:2022-04-29 12:12

我来回答

1个回答

热心网友 时间:2022-06-27 12:09

我以前的笔记,可以参考下。
/*const用法总结*/
#include <iostream>
using namespace std;
class basic
{
public :
basic () {cout<<"default\n"; }
~basic () {cout<<"bye~\n";}
//const int a;// 错误,知识点0 因为此时对象还没生成,可以设置为类所属const static int a;
void A () {}//对应知识点12 应该是 void A ()const
};
struct S
{
int a;
mutable int b;
};
//const int c_a1=5;//知识点1 const 变量因为不能通过程序改变,必须在定义时进行初始化
int a2=2;
const int c_a3=a2;//知识点 2 const定义的变量连接性为内部链接,也就是只能在该源文件下可见,相当于static const int a3,如果要让c_a3所有文件可见必须显示的说明exter const int c_a3;
//知识点3 int类型的a2可以赋值给const int类型的a3,反之则不行
int main()
{
const int *p1;//知识点4 这个表示p1存储的数据是一个const int类型变量的地址,也就是*p1的值不能改变
int* const p2=NULL;//知识点5 const粘着谁,谁就被const,所以p被const了,它不能指向其他地址 ,同理,因为他不能改变,必须在定义的时候为他初始化
int *const*p3;//知识点6 p3是一个二级指针,本着粘着谁const谁的原则,*p3被const了,也就是二级指针里存储的那个指针的值不能变。

/*关于指针*/
const int *p4=&a2;//知识点7 int变量的地址可以存入const int*
int *p5=&a2;
//const int **p3=&p2;//错误,知识点8 int*的地址不能存入const int**
/*关于引用*/
const int a4=a2;//知识点9 const变量可交由const引用
int *p6=&a2;
//const int*&p7=p6;//错误,知识点9扩充,此例的const引用写法应该是int *const& ,错误写法里表达的是p7是一个引用,他引用的对象是一个指针,这个指针不允许修改他地址里那个变量的值。const引用指的应该是该引用本身表示的对象值不能改变
//int& a5=3;
/*错误,知识点10 引用只能引用有具体地址的变量,数面值常量(如3,'a'等)、被引用对象与引用类型不同但是可以进行转换的(#1)还有临时变量不能交给一般引用, 对于前两者,一般的做法是分配一块内存,生成他们正确类型的临时变量。
C++同时明确 了,const引用可以引用临时对象(#2)*/
/*关于结构*/
const S B={1,2};
// B.a=3;//错误
B.b=3;//知识点11 即使是const的结构变量,对于声明时加上mutable说明符的,依然可以修改他的值
/*关于类*/
const basic bc;
//bc.A();//错误 ,知识点12 即使A是public,依然不能使用它,因为bc是const的,但是A函数无法保证不修改他。正确的写法见开头A函数声明的说明

return 0;
}
/*注释:
#1:比如等号两边的类型是可以进行转换的,那么会生成临时变量,比如 double& a=2;其中2是int类型,int是可以通过提升转化变成double的2.0的,所以会产生一个2.0的临时变量,引用
a实际是对那个临时变量进行引用

#2:临时对象:是指临时产生,如果被引用了,则内存继续存在,否则马上消失,产生临时变量的情况有很多,比如类型转换 (int)2.5,比如调用构造函数 A a=A(3),比如函数的形参是值而不是引用
或者返回值是值,都会产生临时变量。临时变量还有一个特点就是,A a=b,如果b是一个临时变量,且他的类型是A类,那么此时不会调用拷贝构造函数,而是直接进行成员的赋值,
同样道理,赋值完了这个临时对象消失,但是他也不会调用析构函数!所以避免了如果a中有new出来的空间不会被析构两次。*/
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
中华新生活倍倍加重疾险(互联网)-智多星版值得推荐吗?注意哪些问题? 中华新生活倍倍加重疾险(互联网)-智多星版的优点和缺点是什么?保障内 ... 中华新生活倍倍加重疾险(互联网)-智多星版应该小心哪些陷阱? 中华新生活倍倍加重疾险(互联网)-智多星版有优点嘛? 中华新生活倍倍加重疾险(互联网)-智多星版怎么样?有什么优缺点? #儿时疑惑#真的有龙这个动物嘛? 12生肖就他现在没有哦 去俄罗斯旅游的饮食禁忌 去俄罗斯旅游怎么注意饮食 ...而正常写着3.6--6.1mmol/L,请问我是不是得了糖尿病了? ...得了糖尿病,请问对毕业有什么影响吗,再就是我可以得到保险吗(当然我... 250V2A 的美标电器,问题~~~ vb无效限定符 文献检索中限定符 in 、/的意义 红枣面包怎么做法视频 基础面包配方怎么做 卡通小面包的做法视频 包面的家常做法大全怎么做好吃视频 PYTHON如何打印列表中每个元素 qq黄钻怎么给好友升级超级黄钻 我今天开的黄钻可不可以升级为豪华黄钻??如果可以那么应该怎么办? 黄钻怎样升级 java语言具体可以分为哪些门类??? QQ黄钻的升级是怎么升级的? 怎样才能让黄钻升级? Java语言可分为哪两类,其运行环境是什么? 智力缺陷的儿童造成哪些轻微的长相问题 哪几个方面的缺陷,是因为孩子智力受阻造成的? 什么是天才和智力缺陷? 智力有缺陷跟智力低一点有什么区别? 轻度智力低下哪方面智力缺陷? 智力有缺陷的猫的表现 javascript的限定符 vb中无效限定符是什么意思 C++中类型说明符、类型限定符、类型修饰符的区别是什么?希望分别介绍一下 正则表达式中的\是什么意思呢? C++中为什么说const限定符比#define好呢,#define是查找修改,而const已经将值定义死了不可修改。 限定符是什么意思? const限定符 作用域限定符::的用法问题 excel2010数据有效性限定符 const限定符的疑惑,该怎么解决 scanf在输入unsigned char时所使用的格式限定符是什么? c++为什么引入限定符,相比其他编程语言引入限定符的好处是? 正则表达式/^[^\?]+\??/是什么意思 vb中无效限定符什么意思 我爸爸梦见窗户快掉下来什么预兆? 梦到自己不小心从窗户掉下去 python 怎么列表逆序打印? Excel Excel 打印时怎么只能打一半,剩一半在另一张纸上 - 信息提示 用excel做的表格,为什么只打印出一半