1、“实用性”增强

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

2、C++对c语言register的增强

register关键字 请求编译器让变量a直接放在寄存器里面,速度快
在c语言中 register修饰的变量 不能取地址,但是在c++里面做了内容

1
register关键字的变化
register关键字请求“编译器”将局部变量存储于寄存器中
C语言中无法取得register变量地址
在C++中依然支持register关键字
C++编译器有自己的优化方式,不使用register也可能做优化
C++中可以取得register变量的地址

2
C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效。

3

早期C语言编译器不会对代码进行优化,因此register变量是一个很好的补充。

#include <iostream>  int main()
{  register int a = 0;  printf("&a = %x\n", &a); // c语言这里会报错  for (int i = 1; i < 1000; i++) { // 而对于这种频繁使用i的情况自动进行优化,将i放入寄存器中  printf("%d\n", i);  }  system("pause");  return 0;
}  

3、变量检测加强

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

4、struct类型增强

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

C++中的struct是一个新类型的声明。

#include <iostream>
struct Student
{char name[100];int age;
};int main(int argc, char *argv[])
{struct Student s1 = { "wang1",1 };  //在C中需要struct Student s1,而c++不需要加Struct关键字struct Student s2 = { "wang2",2 };  //在C中需要struct Student s2return 0;

5、C++中所有变量和函数都必须有类型

C++中所有的变量和函数都必须有类型,C语言中的默认类型在C++中是不合法的;

“函数f的返回值是什么类型?”、“参数又是什么类型?”、“函数g可以接受多少个参数?”

//在C语言中,以下不报错,但是在c++中,必须定义返回值的类型和参数的类型,及确定参数个数,不能定义函数时和调用函数时的参数个数不同。
#include <stdio.h>f(i) //没有定义返回值的类型和参数的类型
{printf("i=%d\n",i);
}g()  //参数个数问题
{return 5;
}
int main()
{f(10);g(1);g(1, 2, 3);return 0;
}

在C语言中int f( );表示返回值为int,接受任意参数的函数int f(void);表示返回值为int的无参函数
在C++中int f( );和int f(void);具有相同的意义,都表示返回值为int的无参函数C++更加强调类型,任意的程序元素都必须显示指明类型

6、新增bool类型关键字

C++在C语言的基本类型系统之上增加了bool,C++中的bool只占用一个字节,如果多个bool变量定义在一起,可能会各占一个bit,这取决于编译器的实现。

true代表真值,编译器内部用1来表示;false代表非真值,编译器内部用0来表示。

bool类型只有true(非0)和false(0)两个值,C++编译器会在赋值时将非0值转换成true,0值转换为false。

#include <iostream>using namespace std;int main(int argc, int *argv[])
{int a;bool b = true;printf("b=%d,sizeof(b)=%d\n", b, sizeof(b));//b=1,sizeof(b)=1
b = 4;a = b;printf("a=%d,b=%d\n", a, b);//a=1,b=1
b = -4;a = b;printf("a=%d,b=%d\n", a, b);//a=1,b=1
a = 10;b = a;printf("a=%d,b=%d\n", a, b);//a=10,b=1
b = 0;printf("b=%d\n", b);//b=0return 0;
}

7、三目运算符功能加强

1)C语言返回变量的值,C++语言是返回变量本身。C语言中的三目运算符返回的是变量值,不能作为左值使用;C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地

2)注意:三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用,如:(a < b ? 1 : b )= 30;
3)C语言如何支持类似C++的特性呢?
当左值的条件:要有内存空间;C++编译器帮助程序员取了一个地址而已。

#include <iostream>using namespace std;int main(void)
{int a=10;int b = 20;//返回一个最小值,并且给最小值赋值成30//三目运算符是一个表达式,表达式不可能做左值(a < b ? a : b) = 30;printf("a=%d,b=%d\n", a, b);return 0;
}

转载于:https://www.cnblogs.com/xinmomoyan/p/10603494.html

03C++语言对C的增强——实用性、变量检测、struct类型、C++中所有变量和函数都必须有类型、bool类型、三目运算符...相关推荐

  1. python三引号 内部变量_python在三引号中使用变量

    1.定义和运算: 变量名 = 值 定义变量举例: # 定义一个变量 myCar = "比亚迪F0" # 输出一个变量 print(myCar) 变量之间的简单运算举例: price ...

  2. 【C语言】宏offsetof的模拟实现 (计算结构体中某变量相对于首地址的偏移)

    首先我们应该特别留意 : offsetof 是一个宏,并非是一个函数 ! 宏offsetof的介绍 : 参数:第一个是结构体类型名称,第二个是结构体成员名 返回类型:size_t无符号整形 引用的头文 ...

  3. php在双引号中输出变量要加大括号,php中输出变量加大括号{}作用_PHP教程

    php输出变量加大括号,这是什么写法?看下面一段代码: 代码如下 header("Content-Type:text/html; charset=utf-8"); $test=&q ...

  4. python布尔型变量错误的赋值_Python中布尔变量的值为( )

    [单选题]x 的 y 次方(xy) 以下表达式正确的是________ [多选题]以下关于 Python 字符串的描述中,正确的是( ) [多选题]下列表达式的值为False的是( ) [其它]返回 ...

  5. spark 获取广播变量_Spark流式程序中广播变量和累加器为何使用单例模式

    Spark中广播变量详解以及如何动态更新广播变量​mp.weixin.qq.com 1.广播变量是只读的,使用单例模式可以减少Spark流式程序中每次job生成执行,频繁创建广播变量带来的开销 2. ...

  6. php之变量覆盖漏洞讲解,PHP中的变量覆盖漏洞代码深入解析

    2.CTF中extract()导致的变量覆盖 我们大致分析是要求我们GET传参进去值会经过extract()函数下来会有两个if 第一个if判断 ceshi这个变量是否存在 存在则继续执行if里面的 ...

  7. python中none算变量吗_在python中对变量判断是否为None的三种方法总结

    三种主要的写法有: 第一种:if X is None; 第二种:if not X: 当X为None,  False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()这 ...

  8. java定义私有变量_java – 为什么在类中声明变量私有?

    我会开始道歉,因为我确信这已经在其他地方回答 – 我只是找不到一个解释它的方式我明白的答案!我正在做一个MSc转换课程,还有一些基本的基础,我仍然在努力,包括这一个 – 为什么使变量私有更好. 说我有 ...

  9. 「Shell」- 使用环境变量,替换在文件中的变量(envsubst) @20210401

    问题描述 在部署服务时,脚本的部分内容是是动态生成的.我们可以使用 sed 进行替换,但是我们发现了更好的方法. 通过使用 envsubst 命令,可以替换在文件中的变量引用(类似于其他编程的模板引擎 ...

  10. python画图将标题中有变量_如何在matplotlib中打印变量名作为标题

    在python中不可能轻松地获取变量的名称(请参见answer).对于在python中传递给函数的变量,有使用inspect.详细信息here和基于此answer的案例解决方案的复杂解决方案impor ...

最新文章

  1. 学习web前端你必须要了解的主流框架!
  2. c语言uppercase恢复小写,C语言转换字符串为大写和小写
  3. ufs2.0测试软件,【玩机组教程】让你的一加3/3T的ufs2.0闪存速度焕发新生
  4. java 招聘要求_Java程序员如何进阶,一般招聘都有哪些要求?
  5. mysql applicationcontext.xml_配置applicationcontext.xml文件
  6. 【方案分享】地产项目2022年新春1月系列暖场活动策划方案:新年置业,如虎添翼.pptx(附下载链接)...
  7. WCF 第一章 基础 更多关于配置文件的内容
  8. 经典机器学习系列(十三)【结构化学习】
  9. 浅谈如何使用Redis实现分布式锁
  10. 2022年黑马程序员火爆全网的自学Java必刷教程(价值2w+的教程免费分享)
  11. NUDT硕士论文LaTeX模板
  12. 2021东北四省赛J. Transform(空间几何)
  13. 零知识证明java实现
  14. 华为否认提前发年终奖 网传消息实为销售激励计划
  15. [芭比公主系列][国英双语]芭比之十二芭蕾舞公主 Barbie in The 12 Dancing Princesses
  16. 零线和地线接反了会发生什么?
  17. 学渣的刷题之旅 leetcode刷题 26. 删除排序数组中的重复项
  18. 怎么把图片转换成Tikz图片
  19. Vue 传值方式——父向子传递数据
  20. nginx代理图片和视频

热门文章

  1. Atitit 代码之美读后感目录内容简介 · · · · · · 1目录 1作者简介 · · · · · · 2ati评价案例法总结 内容简介 · · · · · ·《
  2. Atitit 数据控制语言与权限  DCL
  3. Atitti 摘要算法 散列算法SHA1 和 MD5  crc32 目录 1.1. CRC(Cyclic Redundancy Check,循环冗余校验)算法出现时间较长 1 1.1.1. 数据摘要算
  4. Atitit  深入理解命名空间namespace  java c# php js
  5. paip.文件读写api php java python总结.txt
  6. paip.c++ 指针跟引用的区别.
  7. paip.提升效率----几款任务栏软件vc59
  8. paip.软件开发之COOKIE调试
  9. Rust: Rangechar 'a'..'z' 能干什么?......待续
  10. Julia和Matlab中的sum()的不同