C++学习前的过渡
芈安
这个作者很懒,什么都没留下…
展开
-
namespace 命名空间作用域
C中只有 全局作用域 和 局部作用域 C++中为解决命名冲突,提出这么一个概念 namespace TL13 { int a = 10; int b = 20; int Sum(int a,int b) { return 0; } } 使用方法: TL13::sum(10,20);//使用域名 using TL13::sum;//using声明,把声明后的符号暴露在当前using声明所在作用域 using namespace TL13;//usin原创 2021-01-19 17:48:17 · 196 阅读 · 1 评论 -
new与malloc,delete与free区别
malloc 只开辟空间 new 不仅开辟空间,系统还会调用构造函数 free 只收回空间 delete 先调用析构函数 再收回空间 new / delete 是关键字或运算符,可以重载 malloc / free 是函数 new返回值类型是安全的,不需要强转;大小由系统计算 malloc返回值类型不安全,需要强转;大小需要使用者计算 void* malloc(size_t size);//malloc函数原型 void free(void* ptr);//free函数原型 ..原创 2021-01-19 17:47:40 · 86 阅读 · 0 评论 -
C和C++的相互调用
C++中调用C代码 当编译器编译C++文件时,会优先选择cpp的编译方式 而C代码应该用C的编译方式编译 所以用以下处理方式 #ifdef __cplusplus extern "C"{ #endif C代码 #ifdef __cplusplus } #endif C中调用C++代码 //C++源文件可修改 //用extern "C" //C++源文件不可修改 //加中间层 //写一个接口,用C语言的方式编译,接口中调用C++函数 int a原创 2021-01-19 17:46:36 · 144 阅读 · 0 评论 -
inline函数
inline函数 在编译阶在调用点直接代码展开 不生成符号,仅文件内可见 inline函数与宏的区别: inline函数在编译阶段 有类检查和安全检查 安全 宏 在预编译阶段 直接进行文本替换 不安全 inline函数和static修饰的函数有什么区别: inline直接代码展开,没有开栈清栈开销 static 有开栈清栈开销 生成符号 local属性 只在本文件可见 因为没有有开栈清栈开销,所以效率高,那为什么不把所有函数设为inline函数呢 inline缺陷:以代码膨原创 2021-01-19 17:45:25 · 91 阅读 · 0 评论 -
函数重载
C语言中:不能进行函数重载 C++中:可以进行函数重载 这与函数符号生成规则有关: C:只和函数名称有关 C++ :与函数原型有关 函数重载 1.函数返回值类型不同 不够成重载 因为函数调用时会产生二义性 2.函数名称不同 不够成重载 3.形参列表 1)形参类型不同 构成 2)形参个数不同 构成 3)形参顺序不同 构成 函数重载三要素:1.同名2.不同参3.同作用域(源于就近原则) 重载决议过程:精确匹配==>隐式转换原创 2021-01-19 17:44:33 · 77 阅读 · 1 评论 -
函数默认值
函数默认值 概念:函数设计过程中给予形参默认值,没有实参的话,有默认值 函数默认值赋给规则: 1.函数的默认值自右向左赋予, 函数调用过程,实参入栈顺序自右向左; 实参与形参匹配,自左向右 2.默认值不能重复赋予 3.默认值一般设在声明上 若声明与定义分开,默认值在定义上 调用点又在定义点之前,会导致默认值会失效 ...原创 2021-01-19 17:41:26 · 863 阅读 · 0 评论