一、C与C最核心的区别在于设计哲学不同C语言的设计是面相过程的编程思想是手动挡的底层工具他信任程序员的每一个操作。C语言设计相当于自动挡手动拨片追求零开销抽象面向对象编程通过RAII机制把资源管理交给对象的生命周期。二、三大核心区别1、编程范式思维模式的不同C是过程式结构化数据struct封装和操作函数是分离的要操作数据必须把数据指针传给函数。struct结构体他不是类内部只有属性没有方法要给struct的对象的属性进行赋值必须在外部的函数中将该对象指针作为参数传递在函数中进行对象属性值的赋值。C多范式C支持面向对象封装、继承、多态泛型编程函数式lambda。数据和方法绑定在一起通过类来构建高内聚的模块。2、内存和资源管理不同最本质的工程落地区别C的做法依赖程序员手动处理使用malloc、calloc来分配原始内存用free来释放内存完全依赖程序员手动配对一旦忘记free就是内存泄漏C做法引入RAII机制C通过RAII机制实现资源获取初始化new会调用构造函数delete会调用析构函数。最关键的是栈对象在离开作用域时会自动调用析构函数释放资源。如智能指针容器vector3)、抽象能力的实现层级编译与运行时C的抽象函数指针与void*C语言只能通过函数指针与void*来实现抽象类型检查较弱多态需要运行时传参有一定开销且不直观。C抽象模板编程虚函数C通过模板编程实现多态在编译期生成代码无运行时开销也就是零开销抽象。虚函数通过虚表实现动态绑定是运行时多态这种抽象能力让C既能写操作系统内核又能写高层业务逻辑。C把释放资源这件事从程序员手动记忆变成了对象的生命周期自动管理这是工程上防内存泄漏的根本性进步。三、底层与编译层面的区别1、符号修饰与extern “C”C支持函数重载编译器会对函数名重整C编译器不会重整符号名这就是为什么C调用C语言时要用extern “C”来修饰。2类型安全差异C语言中void*可以隐式转换为任何指针类型。C中void*不能隐式转换必须强制类型转换四、C不是C的超集C有restrict关键字可以告诉编译器指针没有别名以便优化C没有
【C++】004、C与C++的最核心的区别
一、C与C最核心的区别在于设计哲学不同C语言的设计是面相过程的编程思想是手动挡的底层工具他信任程序员的每一个操作。C语言设计相当于自动挡手动拨片追求零开销抽象面向对象编程通过RAII机制把资源管理交给对象的生命周期。二、三大核心区别1、编程范式思维模式的不同C是过程式结构化数据struct封装和操作函数是分离的要操作数据必须把数据指针传给函数。struct结构体他不是类内部只有属性没有方法要给struct的对象的属性进行赋值必须在外部的函数中将该对象指针作为参数传递在函数中进行对象属性值的赋值。C多范式C支持面向对象封装、继承、多态泛型编程函数式lambda。数据和方法绑定在一起通过类来构建高内聚的模块。2、内存和资源管理不同最本质的工程落地区别C的做法依赖程序员手动处理使用malloc、calloc来分配原始内存用free来释放内存完全依赖程序员手动配对一旦忘记free就是内存泄漏C做法引入RAII机制C通过RAII机制实现资源获取初始化new会调用构造函数delete会调用析构函数。最关键的是栈对象在离开作用域时会自动调用析构函数释放资源。如智能指针容器vector3)、抽象能力的实现层级编译与运行时C的抽象函数指针与void*C语言只能通过函数指针与void*来实现抽象类型检查较弱多态需要运行时传参有一定开销且不直观。C抽象模板编程虚函数C通过模板编程实现多态在编译期生成代码无运行时开销也就是零开销抽象。虚函数通过虚表实现动态绑定是运行时多态这种抽象能力让C既能写操作系统内核又能写高层业务逻辑。C把释放资源这件事从程序员手动记忆变成了对象的生命周期自动管理这是工程上防内存泄漏的根本性进步。三、底层与编译层面的区别1、符号修饰与extern “C”C支持函数重载编译器会对函数名重整C编译器不会重整符号名这就是为什么C调用C语言时要用extern “C”来修饰。2类型安全差异C语言中void*可以隐式转换为任何指针类型。C中void*不能隐式转换必须强制类型转换四、C不是C的超集C有restrict关键字可以告诉编译器指针没有别名以便优化C没有