【C++深度剖析学习总结】 2 C语言到C++的进阶

举报
CodeAllen 发表于 2021/10/29 22:59:21 2021/10/29
【摘要】 【C++深度剖析学习总结】 2 C语言到C++的进阶 作者 CodeAllen ,转载请注明出处   C语言和c++的关系 1.c++继承所有的C语言特性 2.c++在C语言的额基础上提供了更多的语法与特性 3.c++的设计目标就是运行效率和开发效率的统一   主要添加的那些呢? 类型,...

【C++深度剖析学习总结】 2 C语言到C++的进阶

作者 CodeAllen ,转载请注明出处


 

C语言和c++的关系

1.c++继承所有的C语言特性

2.c++在C语言的额基础上提供了更多的语法与特性

3.c++的设计目标就是运行效率和开发效率的统一

 

主要添加的那些呢?

类型,函数加强   ,异常处理

 

一个升级;

1.c++更强调语言的实用性

2.所有的变量都可以在需要使用的时候再定义

 

 C语言都是在作用域内进行定义!


  
  1. for(int i=1; i<=3; i++)  //直接在循环判断添加内定义,这在C语言是不存在的特性
  2.     {
  3.         for(int j=1; j<=3; j++)  
  4.         {
  5.             c += i * j;
  6.         }
  7.     }

 

第二个升级 

register关键字请求编译器将局部变量存储于寄存器中

   ---在C语言中依然支持register关键字,但是优化可能已经放入里面了,还有就是请求级别低,编译器完全可以拒绝

   ---c++编译器有自己的优化方式,但是这个关键字基本是看不到的

        C语言中无法获得register变量的地址

        c++可以获得register变量的地址

 

---在老版本的c++编译器中需要获取register变量的地址时,register对变量的声明变得无效,但是现代的版本基本看不见register了

---早起C语言编译器不会对代码进行优化,全是手工进行,register就是一个很好的补充

 

第三升级

1.在C语言中,重复定义多个同名的全局变量是合法的

2.但是,在c++中,不允许定义多个同名的全局变量

        C语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上

 

实例1:几个升级的实际代码


  
  1. #include <stdio.h>
  2. int g_v;
  3. //int g_v;
  4. int main(int argc, char *argv[])
  5. {
  6. printf("Begin...\n");
  7. int c = 0; //区别
  8. for(int i=1; i<=3; i++) //区别
  9. {
  10. for(int j=1; j<=3; j++)
  11. {
  12. c += i * j;
  13. }
  14. }
  15. printf("c = %d\n", c);
  16. register int a = 0;
  17. printf("&a = %p\n", &a); //在c++是合法的,可以直接取地址,因为之前的规则是取地址都是针对内存来说的
  18. printf("End...\n");
  19. return 0;
  20. }

 

第四升级

struct关键字的加强

   ---C语言中的struct定义了一组变量的集合

   ---C语言中的struct定义的标识符并不是一种新的类型

   ---c++的struct用于定义一个全新的类型

 

C语言和C++的结构的等价定义


  
  1. typedef struct _tag_student Student; //C语言必须声明才可以使用
  2. struct _tag_student
  3. {
  4. const char* name;
  5. int age;
  6. };
  7. struct Student //c++直接就可以,更简便
  8. {
  9. const char* name;
  10. int age;
  11. };

 

C++有一个重要的升级

1.c++所有的标识符都必须显示的声明类型   ---  c++对标识符是更加严格的

2.C语言中的默认类型在c++中是不合法 


  
  1. f(i)
  2. {
  3. printf("i = %d\n",i)
  4. }
  5. g()
  6. {
  7. return 5;
  8. }

引出的问题是:

1.函数f的返回值与参数分别是什么类型的?

2.函数g可以接受多少个参数?

答:需要看使用什么编译器编译

       若是C语言  int类型,参数为任意多个   ,后者是不接受任何参数

       若是c++,编译器认为是没有区别的

 

 

实验2:C语言到c++的升级


  
  1. #include <stdio.h>
  2. struct Student
  3. {
  4. const char* name;
  5. int age;
  6. };
  7. f(i)
  8. {
  9. printf("i = %d\n", i);
  10. }
  11. g()
  12. {
  13. return 5;
  14. }
  15. int main(int argc, char *argv[])
  16. {
  17. Student s1 = {"Delphi", 30};
  18. Student s2 = {"Tang", 30};
  19. f(10);
  20. printf("g() = %d\n", g(1,2,3,4,5));
  21. return 0;
  22. }

 

 

小结:

1.c++更强调实用性,可以在任意的地方声明变量

2.c++中的register只是一个兼容的作用

3.c++编译器能够更好的进行优化

4.c++中的任意表示符都必须显示的指明类型

 

文章来源: allen5g.blog.csdn.net,作者:CodeAllen的博客,版权归原作者所有,如需转载,请联系作者。

原文链接:allen5g.blog.csdn.net/article/details/84669120

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。