博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
03C++语言对C的增强——实用性、变量检测、struct类型、C++中所有变量和函数都必须有类型、bool类型、三目运算符...
阅读量:6918 次
发布时间:2019-06-27

本文共 2677 字,大约阅读时间需要 8 分钟。

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 
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 
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 s2 return 0;

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

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

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

//在C语言中,以下不报错,但是在c++中,必须定义返回值的类型和参数的类型,及确定参数个数,不能定义函数时和调用函数时的参数个数不同。#include 
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 
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=0 return 0;}

7、三目运算符功能加强

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

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

#include 
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

你可能感兴趣的文章
软件开发所用bug管理系统之mantis之windows版
查看>>
RHEL/CentOS6.6SSHD服务安装、配置、使用
查看>>
报错nginx failed error: during websocket handshake
查看>>
爬姓名大全网站的姓名
查看>>
ORA-01102: cannot mount database in EXCLUSIVE 处理方法
查看>>
linux下sshd_config的StrictModes参数
查看>>
华为底部虚拟导航栏挡住布局
查看>>
项目管理的几个概念(WBS、OBS、RBS、BOM、CWS、CA)总结与区分
查看>>
菜鸟眼中的vim 编译器
查看>>
数据库密码设置
查看>>
java:抽象类与接口的姻缘
查看>>
关于linux下部署项目时遇到MYSQL_ATTR_INIT_COMMAND未定义时解决办法
查看>>
Account
查看>>
PHP集成开发环境里面的www问题
查看>>
探秘Java9之类加载
查看>>
记一次 OpenIPMI core的分析
查看>>
MySQL误操作后如何快速恢复数据?
查看>>
Bash中which的用法
查看>>
exec format error in docker
查看>>
VSCode安装使用(Python)
查看>>