栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

C++之基础知识点总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++之基础知识点总结

一、变量的声明与定义区别——extern关键字作用

注意:const定义的变量例外,如a.cpp和b.cpp中都定义了const int a = 100;则不会报错的,具体原因查看const那节。

二、变量的初始化、赋值区别

三、引用与指针

左值引用与右值引用

引用使用注意点:

如何理解引用不是一个对象?

一个对象一般有两方面的属性: 1, 存储位置,即该对象的地址;2, 值属性,即对象存储的具体值。因为引用本身不占用存储位置,它只是另外一个对象的别名而已,即不具备上述对象属性的第一点,所以不能算作对象。其实简单试验一下就知道了,如果引用自己占用存储空间(类似指针), 我们获取引用的地址应该与其所引用的对象的地址不同才对,比如:

int a, &ref = a;

cout<<" &a = "<< &a <<", &ref = "<<&ref<

我试验的结果是:

&a = 0x22fe44, &ref = 0x22fe44

可见二者的地址相同,ref并没有占用单独的存储空间

void*指针

指针使用注意点

任何非nullptr的指针,放在if语句中都是true。

指针之间可以进行比较操作,如果两个指针指向同一个地址,则返回true,否则返回false。

指向指针的指针

指向指针的引用

指针与引用区别

int i = 1024, *p = &i, &r = i;  这样是定义出了三个变量,分别是一个基本类型,一个指针,一个引用。

千万不要写成 int* a, b;以为这样就定义除了两个指针,其实不是的,a是一个指针,但b仍然是一个变量,因此在定义指针与引用时,最好写成:int *a, *b, &c;

四、const作用

const变量必须在定义的时候就初始化赋值(与java区别)

如果想在多个文件之间共享const变量,则必须在定义的时候也加上extern。

1. const引用

严格来说,不存在常引用,因为引用本身不是个对象,另外根据引用特点可知,一个引用跟变量绑定后就无法再绑定到其他对象了,所以引用本身也就是不变的。常说的常引用是指用const修饰的引用,它的出现是由于对于常量对象必须使用常引用,但也允许常引用绑定到非常量的对象、字面值、甚至是一个一般表达式。

const引用与非const引用指向非常量对象时的区别:

char a = 100;

int &r3 = a;  // 编译错误

const int& r4 = a; // 编译成功

const引用与非const引用区别

char a = 100;
const int &r = a;
a = 120;
std::cout << "r = " << r << std::endl;

r的值还为100。

当const引用指向一个非常量对象时,这个对象还是可以通过别的途径更改其值得,如上面代码所示。

2. const指针与指针const

首先要阐述的一点,为了学习方便,叫法可能和教材有出入,我这里的const指针为:指向const对象的指针,其写法如:const int *ptr;   而指针const是指该指针本身就是一个常量,它一旦指向一个地址后,便不可再改变,其定义如:int *const ptr;

2.1 const指针

要想指向const对象的地址,只能使用const指针,这一点和const引用相同;

另一点和const引用相同的是,const指针也可以指向非const的对象,这种情况下,对象的值无法通过const指针修改,但是却可以通过其他途径修改;

但和const引用不同的是,const指针的类型无法指向不是这个类型的对象,如:

int a = 10; const double *ptr = &a;是错的。指针的类型必须与其所指向的对象的类型一致。

2.2 指针const

指针是对象而引用不是,因此就像其他对象类型一样,可以把指针本身定义为常量。同常量对象的性质一样,它必须在定义的时候就显示初始化,否则编译失败,如:

    int a = 100;
    // int *const ptr_const; // 不显示初始化错误
    int *const ptr_const = &a; // 指针const,说明是一个值不变的指针
            
    const double pi = 3.14;
    const double *const const_ptr_const = π // const_ptr_const既是一个指向常量的指针,本身又是一个常量

指针是一个常量并不意味着无法通过其修改所指向对象的值,能否这样做完全取决于对象是不是const的。如上所示,由于a不是const,所以通过ptr_const可以修改a的值。

3. constexpr与常量表达式

常量表达式是指值不会改变,并且在编译阶段就能得到结果的表达式。显然,字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。如:

const并未区分出编译期常量和运行期常量;
constexpr限定在了编译期常量;

说的直白点,const修饰的变量是运行时不可改的,而constexpr修饰的变量就真的是常量,编译时就确定其值了,所以constexpr更接近常量的概念。

4. const函数

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/288200.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号