gpt4 book ai didi

c++ primer中的const限定符

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章c++ primer中的const限定符由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

const 限定符 。

 const是一种类型修饰符,用于说明永不改变的对象。const对象一旦定义,就无法再赋新值,所以必须被初始化.

例:const int bufsize = 512,

它的值一旦定义就不能被改变,并且默认情况下,仅对文件内有效.

如果要在多个文件中共享const对象,则需要在定义和声明前都加extern; 。

初始化和对const的引用 。

例:

?
1
2
3
4
5
6
7
8
9
10
const int ci = 1024;
const int &r1= ci;
r1 = 42; // 值不可以被改变
int &r2 = ci; //错误,非常量引用不可以指向常量对象。
int i=42;
const int &r1 = i;
const int &r2 = 42;
const int &r3 = r1 * 2;
// 以上表达都是正确的,允许一个常量引用绑定非常量对象、字面值,甚至是个一般表达式。
int &r4 = r1*2; // 错误;r4不是一个常量引用,不可以用常量引用来初始化。

下面例外的情况:

?
1
2
double dval =3.14;
const int &r = dval;

上面的表达式是正确的,然而直接如下是错误的; 。

?
1
2
3
double dval= 3.41;
int &r = dval; // double类型的引用不可以是int类型。
// 原因:引用的目的是想通过引用来改变dval的值,否则要给r赋值干嘛,所以c++规定是违法的。

原因是在赋给常量引用时,其后常量引用的值就不能被改变,也就无所谓通过引用来改变dval的值了。在编译时上述代码会变成如下形式:

?
1
2
const int temp = dval;
const int &r = temp;

const 指针:

?
1
2
3
4
int errNumb = 0;
int * const curErr = &errNumb; // curErr将一直指向errNumb // 指针本身是一个常量并不意味着不能通过指针修改其所指对象的值//这地方是指curErr自己存储的地址不能改变。
const double pi = 3.14159;
const double * const pip = &pip; //pip是一个指向常量对象的常量指针

顶层const 。

顶层const表示指针本身是一个常量; 。

底层const指针所指的对象是一个常量.

?
1
2
3
4
5
6
int i = 0;
int * const p1 = &i; //不能改变p的值,这是一个顶层const
const int ci = 42; //不能改变ci的值,这是一个顶层const
const int *p2 = &ci; //允许改变p2的值,这是一个底层的const
const int * const p3 = p2; //靠右的const是顶层的const,靠左的const是底层的const
const int &r = ci; // 用于声明引用的const都是底层的const。

总结 。

到此这篇关于c++ primer中的const限定符的文章就介绍到这了,更多相关c++ primer const限定符内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。

原文链接:https://blog.csdn.net/u014365862/article/details/46848613 。

最后此篇关于c++ primer中的const限定符的文章就讲到这里了,如果你想了解更多关于c++ primer中的const限定符的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com