1.输入输出
C++标准库 std
#include <iostream>
using namespace std;
int main()
{
int a = 0;
char ch = 'w';
cin >> a >> ch;
cout << "a = " << a << << "ch = " << ch << endl;
return 0;
}
2.引用
1.引用的处理流程
引用在底层是一个指针,使用到引用变量的地方系统自带解引用的过程。
2.引用和指针的区别
1)引用是一个别名,底层以指针的形式来做语法支持
2)使用指针需要断言 ,引用不需要(因为没有空引用),更安全
3.特点:
1)没有空引用,定义时必须初始化
2)引用不能引用取地址的数据 (eg:eax寄存器(因为没有地址)、立即数(数字)int &b=10;(因为取不了地址)
3)没有引用的引用
4.const和引用的结合
const int& b=10; 常引用
常引用能引用不能取地址的数据,把不能取地址的数据放到一个临时量中,常引用引用临时量。
3.inline函数(内联函数)
编译阶段 调用点 直接代码展开
内联函数只在本文件可见
1.inline 函数和宏的区别?
inline函数 安全 编译阶段 有类型检查和安全检查
宏 不安全 预编译阶段 直接文本替换
2.inline函数和static修饰的函数有什么区别?
inline函数 直接代码展开 没有开栈和清栈的开销
static修饰的函数 有开栈和清栈的开销
3.inline函数的缺陷
1)以代码碰撞为代价,使目标文件变得十分庞大
2)以空间换时间的概念
4.inline函数的限制
1)只在Release版本生效,Debug版本不生效,还会入栈
2)inline函数只是给编译器的一个建议【递归 for/while switch 一定不使用inline】
3)inline是基于实现的,不是基于声明的 声明没法展开
4)inline 函数一般写在.h头文件中
4.函数重载
1.
C:同名函数不能共存,因为函数符号生成规则只和函数名称有关
C++:同名函数能共存,因为函数符号生成规则与函数原型有关
函数组成:
返回值 函数名称(形参列表) <==函数原型
{
函数体
}
名称粉碎:C++是支持函数重载,对于多个函数来说,其函数的名称是一样的,为了加以区分,在编译链接时,C++会按照自己的规则篡改函数的名称。这一过程成为“名称粉碎”。不同的编辑器会采用不同的编辑器进行改编。
2.函数重载与什么有关?
只与形参列表有关 1)形参类型不同 2)形参个数不同 3)新参顺序不同
3.函数重载三要素
1)同名 2)不同参 3)同作用域
5.new/delete
1.malloc开辟空间是函数,需要引用<stdlib.h>头文件
new是关键字
2.malloc只是开辟空间
new 能开辟空间和给开的空间初始化
3.malloc申请空间失败的时候,返回空指针
new申请空间失败 throw bad-alloc(坏的内存分配)
4.malloc堆上
new自由存储区
5.malloc 需要计算类型的大小
new不需要 类型的大小是自动进行计算的
空悬指针
int main()
{
int *p=new int(10);
*p=100;
delete p;
cout<<*p<<endl;
*p=10;
cout<<*p<<endl;
return 0;
}
delete p只是把空间归还给系统,但指针仍然指向堆空间,仍可以修改