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

3、变量检测加强

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

4、struct类型增强

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

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

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

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

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

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

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

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=;
int b = ;
//返回一个最小值,并且给最小值赋值成30
//三目运算符是一个表达式,表达式不可能做左值
(a < b ? a : b) = ;
printf("a=%d,b=%d\n", a, b); return ;
}

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

  1. PHP接口中的静态变量、常量与类中静态变量、常量的区别

    接口: 1 不能够定义静态变量(常量除外) 2 定义的常量 const YOUCONST = VALUE,不能在子类中覆盖,在子类中以 interfaceName::YOUCONST的方式调用 3 不 ...

  2. dart系列之:dart语言中的变量

    目录 简介 dart中的变量 定义变量 变量的默认值 Late变量 常量 总结 简介 flutter是google在2015年dart开发者峰会上推出的一种开源的移动UI构建框架,使用flutter可 ...

  3. Java中的变量与变量的作用域

    关于Java中的变量及变量的作用域 关于Java中的变量及变量的作用域 0. 变量的概念 在程序运行期间,系统可以为程序分配一块内存单元,用来存储各种类型的数据.系统分配的内存单元要使用一个标记符来标 ...

  4. ORACLE中声明变量:define variable declare

    在sqlplus 环境中,声明变量的关键字:define variable declare 一.define关键字(host变量) host变量的作用是一个替换作用,是主机环境与oracle进行交互的 ...

  5. java中的变量和数据类型

    变量和javascript的变量含义一样 在Java中,变量分为两种:基本类型的变量和引用类型的变量.(javascript中同样是这样的) 基本数据类型 基本数据类型是CPU可以直接进行运算的类型. ...

  6. PHP 的变量类型,变量检测

    1.PHP的变量类型: 整型       浮点型 字符串 布尔型 数组 对象 null 资源类型 一个变量就是一个盒子,类型可以看做盒子的标签,变量的值就是盒子里的内容 null 是没有类型的空盒子, ...

  7. Python中的变量以及变量的命名

    1.变量的定义 在 python 中,每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建 等号(=)用来给变量赋值 =左边是一个变量名 =右边是存储在变量中的值 变量名=值 变量定义之后,后续就 ...

  8. DEBUG模式下, 内存中的变量地址分析

    测试函数的模板实现 /// @file my_template.h /// @brief 测试数据类型用的模板实现 #ifndef MY_TEMPLATE_H_2016_0123_1226 #defi ...

  9. JS中的变量和输入输出

    一.使用JS的三种方式 1.在HTML标签中,直接内嵌JS(并不提倡使用) <button onclick="alert('点你咋地')">点我</button& ...

随机推荐

  1. Android : 修改内核源码 and 编译、打包成新的boot.img

    一.Android内核源码的下载: 1.Google GIT地址: $ git clone https://android.googlesource.com/kernel/common.git $ g ...

  2. L1-055 谁是赢家

    某电视台的娱乐节目有个表演评审环节,每次安排两位艺人表演,他们的胜负由观众投票和 3 名评委投票两部分共同决定.规则为:如果一位艺人的观众票数高,且得到至少 1 名评委的认可,该艺人就胜出:或艺人的观 ...

  3. Spring异步调用注解@Async的使用

    1.pom依赖 <dependency> <groupId>org.springframework</groupId> <artifactId>spri ...

  4. Spring学习五(JDBC支持)

    Spring的jdbc支持 1配置db.properties,将有关JDBC的信息载入 2bean文件配置数据源,这里用e3p0作为数据源载入db.properties 3配置template的bea ...

  5. SpringBoot集成Swagger2实现Restful(类型转换错误解决办法)

    1.pom.xml增加依赖包 <dependency> <groupId>io.springfox</groupId> <artifactId>spri ...

  6. 你知道怎么用Idea抽取方法、创建class吗?

    liJ IDEA的快捷键是进行重构的利器,坊间盛传,完全使用IDEA快捷键重构的代码,是不需要写测试用例保护的 本文就分享一个使用IDEA抽取方法及创建新的class的方法 工具/原料   Intel ...

  7. PCMU G.711U/PCMA G.711A简介

    PCMA(G.711A) 类型:Audio 制定者:ITU-T 所需频宽:64Kbps(90.4) 特性:PCMU和PCMA都能提供较好的语音质量,但是它们占用的带宽较高,需要64kbps. 优点:语 ...

  8. Centos7安装vsftpd

    1.安装vsftpd yum install vsftpd 2.添加一个ftp用户,一个不能登录系统用户,只用来登录ftp服务,这里如果没设置用户目录.默认是在home下. useradd ftpac ...

  9. 路径问题 :<c:url >的作用

    最近的项目一直报这样的错 可是本地启动 又没问题,xshell查看日志 没有错误日志,找了好久都没想到错误原因.一位大佬几分钟就找到原因了有点扎心. 首先说一下解决问题的思路.首先报错是4开头,说明是 ...

  10. js - 如何使子元素阻止继承父元素事件

    想要阻止点击 #content 区域时触发a事件,需要在 #content 区域内加入阻止事件冒泡的代码,具体代码如下: <div id="box" onclick=&quo ...