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. UI控件Telerik UI for WinForms发布R1 2019|附下载

    Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件.所有的UI for WinForms控件都具有完整的主题支持,可以轻松地帮助开发人员在桌 ...

  2. Vue 项目架构设计与工程化实践

    来源 文中会讲述我从0~1搭建一个前后端分离的vue项目详细过程 Feature: 一套很实用的架构设计 通过 cli 工具生成新项目 通过 cli 工具初始化配置文件 编译源码与自动上传CDN Mo ...

  3. PHP中session_start 函数详解使用方法

    一.官方 session_status() 返回值为: PHP_SESSION_DISABLED 会话是被禁用的. PHP_SESSION_NONE 会话是启用的,但不存在当前会话. PHP_SESS ...

  4. WPA3在2018年为无线安全添砖加瓦

    Wi-Fi Alliance Announces WPA3, the Successor to Wi-Fi's WPA2 Security Protocol The Wi-Fi Alliance -- ...

  5. [转]Cross-type joins in Elasticsearch

    Cross-type joins in Elasticsearch http://rore.im/posts/elasticsearch-joins December 31, 2014 When mo ...

  6. 普通new和placement new的重载

    对于自定义对象,我们可以重载普通new操作符,这时候使用new Test()时就会调用到我们重载的普通new操作符. 示例程序: #include <iostream> #include ...

  7. hadoop day 3

    1.map:局部处理:reduce:汇总 mapper对数据做切分,一份程序在不同的DataNode上独立运行对数据进行处理,reduce程序将所有DataNode上的统计数据进行汇总 Mapper& ...

  8. lintcode 刷题 by python 部分链表题总结(2)

    本篇博客对最近做的链表的算法题做个简单的小结,主要描述题目和提供解题思路,具体代码见我的 github:https://github.com/MUSK1881/lintcode-by-python 3 ...

  9. ELF文件加载与动态链接(二)

    GOT应该保存的是puts函数的绝对虚地址,这里为什么保存的却是puts@plt的第二条指令呢? 原来“解释器”将动态库载入内存后,并没有直接将函数地址更新到GOT表中,而是在函数第一次被调用时,才会 ...

  10. php算法面试案例(转)

    有5个人偷了一堆苹果,准备在第二天分赃.晚上,有一人遛出来,把所有菜果分成5份,但是多了一个,顺手把这个扔给树上的猴了,自己先拿1/5藏了.没想到其他四人也都是这么想的,都如第一个人一样分成5份把多的 ...