C和C++的区别(一)

1、函数的默认值(c++特有)

函数的默认值是c++特有的,c语言不支持默认参数,但是可以用宏来模拟。

  • 从右向左依次附默认值
  • 默认值只能附一次
  • 一般是在声明上附默认值

2、C++函数符号生成规则

int Compare(int a, int b);             ?Compare@@YAHHH@Z
double Compare(int a, int b);          ?Compare@@YANHH@Z
double Compare(double a, int b);       ?Compare@@YANNH@Z
double Compare(int a, double b);       ?Compare@@YANHN@Z

    从上面的几行代码我们可以看出每个函数生成的函数符号都不一样,由以下几点决定:

  • 函数返回值
  • 函数名称
  • 形参列表(1、形参类型2、形参个数3、形参顺序)

3、函数重载

函数重载的三要素:

  • 同作用域才能重载
  • 函数名相同
  • 参数列表不同

注:函数的重载不依赖返回值

4、内联函数(inline)

内联函数在编译阶段处理,在调用点直接将代码展开。

内联函数与static修饰的函数的区别:

  1. 本文件可见
  2. 内敛没有栈帧开辟和清理的开销,static修饰的函数有开栈和清栈的开销

内敛的优点:提高效率。

内敛的缺点:以代码膨胀为代价,空间浪费大。

内敛的注意事项:

  1. 写在头文件中
  2. 只有在release版本生效
  3. 递归、while、switch,内敛只是给一个建议
  4. 内敛是基于实现的关键字(加在定义点)

注:内联函数release版本不生成符号,不可以调试。

C语言C++在多个方面存在区别: - **编程思想**:C语言是面向过程的,如同按步骤做菜;C++则结合了面向对象泛型编程思想,可理解为定义厨师菜谱[^1]。 - **文件扩展名**:C语言源文件扩展名是 `.c`;C++源文件扩展名有 `.cpp`、`.cc` 等,头文件扩展名有 `.hpp` 等,文件后缀不同[^1]。 - **Hello World示例**:C语言使用 `printf("Hello")` 输出;C++使用 `cout << "Hello"` 输出,C语言用函数,C++用对象[^1]。 - **内存管理**:C语言使用 `malloc` `free` 进行内存分配释放;C++除了使用 `new` `delete` 外,还有智能指针,C++的内存管理更安全方便[^1]。 - **函数特性**:C语言不支持函数重载;C++支持函数重载,即同名函数可以做不同的事[^1]。 - **数据结构**:C语言主要使用结构体(`struct`);C++使用类(`class`),类相当于结构体加上方法,可看作是给结构体“添加技能”[^1]。 - **标准版本**:常用的C语言是C89标准,C++C++99标准,如今最新的是C11C++11标准,不同标准功能有所不同,且越新的版本支持的编译器越少[^2]。 - **命名空间**:C语言只有个全局作用域,标识符可能发生冲突;C++引入了命名空间(名字空间),通过命名空间将全局作用域分成不同部分,不同命名空间里的标识符可以相同[^3]。 ### 代码示例 #### C语言 ```c #include <stdio.h> #include <stdlib.h> // 定义结构体 struct Person { char name[20]; int age; }; // 分配内存 void allocate_memory() { struct Person *p = (struct Person *)malloc(sizeof(struct Person)); if (p != NULL) { free(p); } } int main() { printf("Hello\n"); allocate_memory(); return 0; } ``` #### C++ ```cpp #include <iostream> #include <memory> // 定义类 class Person { public: char name[20]; int age; void print_info() { std::cout << "Name: " << name << ", Age: " << age << std::endl; } }; // 分配内存 void allocate_memory() { std::unique_ptr<Person> p = std::make_unique<Person>(); } int main() { using namespace std; cout << "Hello" << endl; allocate_memory(); return 0; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值