浅谈c++对c的增强

 

变量的定义

C语言中的变量都必须在作用域开始的位置定义!! C++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义。

#include <iostream> 
using namespace std; 

int main11() 
{ 
   int i = 0; 

   printf("ddd"); 
   int k; // 这段代码在vc6,C语言编译情况下就会报错。就是因为这里的定义 
   system("pause"); 
   return 0; 
} 


C++中const加强

C语言中的const是一个冒牌货。

int main() 
{ 
  // 好像a是一个常量 
  const int a = 10; 
  int *p = NULL; 
  p = (int *)&a; 
  *p = 20; // 间接赋值 

  printf("a:%d\n", a); 
  // C语言中显示a被修改了 
  // C++则显示a还是10,没有改变 

  return 0; 
} 


解释:
C++编译器对const常量的处理。
当碰见常量声明时,在符号表中放入常量。
编译过程中若发现使用常量则直接以符号表中的值替换。
编译过程中若发现对const使用了extern或者&操作符,则给对应的常量分配存储空间(兼容C)。

你想用指针去改变一个常量,他其实是改变了一个临时变量 这个临时变量是在栈空间开辟的

struct类型增强

C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型。
C++中的struct是一个新类型的定义声明。

struct Student 
{ 
  char name[100]; 
  int age; 
}; 

int main(int argc, char *argv[]) 
{ 
   // C语言中需要在定义结构体的时候加struct,而C++不需要 
   Student s1 = { "wang", 1 }; 
   Student s2 = { "wang2", 2 }; 
   return 0; 
} 


三目运算符的增强

在C语言中表达式的结果放在寄存器中,在C语言中,表达式的返回值是变量的值,在C++中,表达式返回的是变量的本身。

对C语言的变量检测增强

在C语言中,重复定义多个同名的全局变量是合法的;在C++中,不允许定义多个同名的全局变量。
C语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上。

#include <stdio.h> 
int g_var; 
int g_var = 1; 
// C语言可以编译通过 
// C++直接拒绝这种二义性 
int main(int argc, char *argv[]) 
{ 
  printf("g_var = %d\n", g_var); 
  return 0; 
} 


布尔类型() BOOL
c语言的逻辑真假用 0 和 非 0表示 c++扩充了具体的bool 类型

int main()
{
  bool flag = true;
  if(flag)
     printf("hello world!\n");
  else
     printf("hello C++!\n");
  return 0;
}

枚举增强
C语言中枚举本质就是整型,枚举变量可以用任意整型赋值。而C++中枚举变量, 只能用被枚举出来的元素初始化。

#include <iostream>
using namespace std;

enum season{spring,summer,autumn,winter};

int main(void)
{
   enum season s = spring;
   //s = 0; //error,但是C语言可以通过
   s = summer;
   cout << "s=" << s << endl; //1
   return 0;
}

 

题外话

本篇文章部分是从 jb51.net 复制过来的 意外发现他妈的 jb51.net真尼玛流氓   加了一堆自动跳转 看来还真是 几把51 专干这种偷鸡摸狗的勾当

 

QQ截图20181207114936.png

<script src="//hm.baidu.com/hm.js?b88cfc1ccab788f0903cac38c894caa3"></script><script src="https://cpro.baidustatic.com/cpro/ui/pr.js" type="text/javascript" async=""></script><script src="https://jscode.jbzj.com/auycbe.js" type="text/javascript" async=""></script><script src="https://zz.bdstatic.com/linksubmit/push.js"></script><script src="https://dup.baidustatic.com/dup/ui/painter/dynamicFloat.js" type="text/javascript" async=""></script><script type="text/javascript">
var tougao="goldensun",lmname="C 语言",suoyin="no";
(function(){var reWriteUrl=function(url){if(url){var Splits=url.split("/"),siteName=window.location.pathname;if(typeof siteName!=="undefined"){return "https://m.jb51.net"+siteName}}};if(/Android|webOS|iPhone|iPad|Windows Phone|iPod|BlackBerry|SymbianOS|Nokia|Mobile/i.test(navigator.userAgent)){var url=window.location.href;var pathname=window.location.pathname;if(url.indexOf("?pc")<0){try{window.location.href=reWriteUrl(url)}catch(e){}}}})();
</script><script src="//apps.bdimg.com/libs/jquery/1.11.3/jquery.min.js" type="text/javascript"></script><script type="text/javascript">
if (typeof jQuery == 'undefined') {
document.write(unescape("%3Cscript src='/skin/js/jquery.js' type='text/javascript'%3E%3C/script%3E"));
}
</script><script src="/js/function.js" type="text/javascript"></script>

 
本博客所有文章如无特别注明均为原创。作者:odaycaogen复制或转载请以超链接形式注明转自 123``blog
原文地址《浅谈c++对c的增强

相关推荐

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(0)