C++语言对C的增强(1)——实用性、变量检测、struct类型、C++中所有变量和函数都必须有类型、bool类型、三目运算符
1、“实用性”增强
C语言中的变量都必须在作用域开始的位置定义,C++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义。
2、变量检测加强
在C语言中,重复定义多个同名的全局变量是合法的;在C++语言中,不允许定义多个同名的全局变量。C语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上。
3、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
struct Student s2 = { "wang2", }; //在C中需要struct Student s2 return ;
4、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++更加强调类型,任意的程序元素都必须显示指明类型
5、新增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 ;
}
6、三目运算符功能加强
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 ;
}
C++语言对C的增强(1)——实用性、变量检测、struct类型、C++中所有变量和函数都必须有类型、bool类型、三目运算符的更多相关文章
- C++ c++与C语言的区别(struct类型的加强,函数-变量类型加强,bool类型)
//区别④:struct类型的加强(C++版本) #include<iostream> using namespace std; //C++中的struct是一个新类型的定义声明 //c+ ...
- dart系列之:dart语言中的变量
目录 简介 dart中的变量 定义变量 变量的默认值 Late变量 常量 总结 简介 flutter是google在2015年dart开发者峰会上推出的一种开源的移动UI构建框架,使用flutter可 ...
- 03C++语言对C的增强——实用性、变量检测、struct类型、C++中所有变量和函数都必须有类型、bool类型、三目运算符
1.“实用性”增强 C语言中的变量都必须在作用域开始的位置定义,C++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义. 2.C++对c语言register的增强 register关键字 ...
- C++学习笔记-C++对C语言的扩充和增强
C++兼容C,在C的基础上学习C++是一个不错的选择,也能够更好的了解C与C++的区别与联系. 变量定义 C语言中的变量都必须在作用域开始的位置定义 C++中更强调语言的实用性,所有的变量都可以在需要 ...
- javascript 核心语言笔记- 3 - 类型、值和变量
JavaScript 中的数据类型分为两类:原始类型(primitive type)和对象类型(object type).原始类型包括数字.字符串和布尔值 JavaScript 中有两个特殊的原始值: ...
- C语言中内存的申请函数
C语言跟内存申请相关的函数主要有 alloca,calloc,malloc,free,realloc,sbrk等. alloca是向栈申请内存,因此无需释放. malloc分配的内存是位于堆中的,并且 ...
- C语言中计算变量占用内存空间
C语言中计算变量占用内存空间 在C语言中通常用[sizeof]运算符计算变量占内存空间,如下面的例子:
- 转载~kxcfzyk:Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解
Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解 多线程c语言linuxsemaphore条件变量 (本文的读者定位是了解Pthread常用多线程API和Pthread互斥锁 ...
- C语言中有bool类型吗?
之前一直都没有注意到,最近在用C语言写DSP算法时,偶然间发现我函数中定义的bool类型的变量在VC6.0(我主要用它来检查一下语法错误)中编译居然报错了,说是bool类型没有定义.用了这么久的C和C ...
随机推荐
- octotree神器 For Github and GitLab 火狐插件
Code tree for GitHub and GitLabExtension to show code tree for GitHub and GitLab. Useful for develop ...
- P4299 首都
题目 P4299 首都 做法 这题是动态维护树的重心,连边后找到两棵树的重心拉一条链(性质:新重心在链上),然后暴力爬 要注意: 1.是找重心的过程中要先把旋转标记放下来,因为\(Splay(x)\) ...
- 大话设计模式之PHP篇 - 简单工厂模式
假设有一道编程题:输入两个数字和运算符,然后得到运算结果.非常简单的一道题目,通常的实现代码如下: <?php Function Operation($val1, $val2, $operate ...
- 异常:没有找到本地方法库,java.lang.UnsatisfiedLinkError: no trsbean in java.library.path
1.问题描述 迁移环境中遇到这个问题 : Fri Apr 20 15:22:31 CST 2018, Exception:500004___-500004,没有找到本地方法库,java.lang.Un ...
- word导出失败问题
1.问题分析: 求职者在线填写招聘简历,人事hr下载简历无法打开,报错如下: 对于”根据架构,xml数据无效”,是因为没有成功生产xml,内部代码里还包含word无法识别的代码块,所以无法打开,通过用 ...
- JAVA 写中文字符串到指定文件 中文乱码 问题解决
之前试过下面代码里面的注释掉的 方法,都不行,后来想到了不如指定编码格式试试,果真可以了. String as= “中文字符”; //byte[] b = as.getBytes(); try{ Fi ...
- docker安装 之 ---CentOS 7 系统脚本自动安装
[使用脚本自动安装] 在测试或开发环境中Docker官方为了简化安装流程,提供了一套便捷的安装脚本,CentOS系统上可以使用这套脚本安装: $ curl -fsSL get.docker.com - ...
- T-SQL_面试题
创建表插入数据 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname ...
- 使用JMeter建立接口测试
[需求]某组机器是Android和iOS输入法接口服务器,有很多重要的接口,例如:升级,网络开关,热词等.现在有3台机器过保要下线,新申请了3台机器,需要验证一下这3台机器接口的正确性. [测试步骤] ...
- Office 2016 (Preview)
Office 2016 Preview for MAC (预览版) https://products.office.com/zh-CN/mac/mac-preview 安装下载:http://go.m ...