C++基础内容

为什么要给常量初始化?

在编译期将常量的值直接写入到常量的使用点
常量的初始化必须使用常量,如果使用变量就会退化成常变量

常量会占内存

指针和数组名的区别------什么是指针

数组名---地址---常量---39323987
指针---变量

const修饰额内容不能作为左值
不能泄漏常量的地址给非常量的指针

const修饰的类型是离他最近的第一个成型的类型,
其余的是他修饰的内容

如果const修饰的内容不包含指针,则无法参与类型

int* p1 = &a;
    const int* p2 = &a;
    int const* p3 = &a;
    int* const p4 = &a;

int* q1 = &a;
    const int* q2 = &a;
    int const* q3 = &a;
    int* const q4 = &a;             

const修饰的内容不能作为左值;const修饰离他最近的第一个成型的类型,类型以外的就是修饰的内容        

p1=q1                 p2=q1               p3=q1             p4=q1 

p1=q2                p2=q2                p3=q2             p4=q2 

p1=q3                p2=q3                p3=q3             p4=q3 

p1=q4                p2=q4                p3=q4             p4=q4 

p1=q2;会泄露常量地址给非常量指针。

不能泄露常量地址给非常量指针

如果const修饰的内容不包含指针,则无法参与类型

引用

引用的底层是一个指针
在使用到引用的地方,编译期会自动替换成底层指针的解引用

引用为什么必须初始化?

引用在编译器会自动替换成底层指针的解引用,初始化以后再也无法改变底层指针的指向
//引用为什么一旦初始化就无法改变引用的方向?

 不能用非常量的指针去引用一个常量

        当引用一个不可以取地址的量的时候,使用常引用
        会生成一个临时量
       引用临时量

       临时量都有常属性

* 编译链接过程
* 函数调用过程

面向对象
运算符重载
模板
继承与多态
STL  容器  泛型算法  函数对象
智能指针


函数的区别(c和c++)

//函数默认值参数

在函数声明或定义的时候,给定参数默认值,如果实参传递的时候,不给该形参传值,
否则会按默认值传参

函数参数的默认值是在编译期生成指令的时候直接生成入参指令
函数参数的默认值只能传递常量
函数的默认值参数只能从右向左依次赋值,不能跳过

默认值参数在同一作用域只能赋值一次,不能重复赋值。

因为函数参数的默认值是在编译期代入的,所以函数参数的默认值只在本文件生效

内联函数

在realse版本(发行),在调用内联函数的时候,该函数会在调试点展开——编译时期展开
在debug版本(调试),内联函数和正常函数调用方式一致

由于内联函数在编译期展开,在编译期无法获取变量的值,而递归函数的终止条件一定需要变量参与,
所以递归函数不可能被处理成内联函数

inline只是对系统的建议,建议将该函数处理为内联。

inline函数在debug版本生成的是local符号,如果处理为内联之后在release版本不生成符号,
直接在调用点展开

符号:所有的数据都会生成符号,指令中只有函数名会生成符号
全局符号:global符号      所有的文件只要引用声明就可以使用
局部符号:local符号       只有本文件可见


数据
指令

*******宏函数
 预编译时期在调用点展开
无法调试
没有类型安全校验
没有栈帧开辟
单文件可见
不生成符号

******static函数
不展开
可以调试
有类型安全校验
有栈帧开辟
单文件可见
local符号

*******内联函数
debug不展开,release在调用点展开
可以调试
有类型安全校验
debug有栈帧开辟,release没有栈帧开辟
单文件可见
debug生成local,release不生成

******普通函数
不展开
可以调试
有类型安全校验
有栈帧开辟
多文件可见
生成符号
/*
函数重载
函数名相同,参数列表不同

函数重载实在编译时期决定的究竟调用哪个函数——静多态的一种

C语言生成函数符号依赖函数名
C++生成函数符号依赖函数名和参数列表(返回值不影响)
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值