ze结构区分,【C++】C & C++常用结构的区别与常见问题(二)

1、C++与C是什么关系?

1) C语言和C++并不是对立的竞争关系; 2) C++是C语言的加强,是一种更好的C语言; 3) C++是以C语言为基础的,并且完全兼容C语言的特性; 4) 学C++并不会影响原有的C语言知识,相反会加深对C认知; 5) C++是Java/C#等现代语言的基础,学C++后能快速握语言;

2、C++有什么特点? 1) 以C语言为基础; 2) 面向对象编程; 3) 类型、函数、异常加强;

3、C++中的命名空间是什么意思? 所谓namespace【命名空间】,是指标识符的各种可见范围。例如: using namespace std;这样命名空间std内定义的所有标识符都有效(曝光),就好像它们被声明为全局变量一样。当然也可以自己编写命名空间。【C中与C++中namespace特点】

C中的命名空间 a) 在C语言中只有一个全局作用域 b) C语言中所有的全局标识符共享同一个作用域 c) 标识符之间可能发生冲突

C++中提出了命名空间的概念 a)命名空间将全局作用域分成不同的部分 b) 不同命名空间中的标识符可以同名而不会发生冲突 c) 命名空间可以相互嵌套 d) 全局作用域也叫默认命名空间

```cppnamespace NamespaceA{int a = 0;}void main(){using namespace NameSpaceA;printf("a = %d\n", a);system("pause");}

4、关于变量定义C vs C++ 1) C语言中的变量都必须在作用域开始的位置定义!! 2)C++更强调语言“实用性”,所有变量可以在需使用时再定义

5、register关键字增强 a)register关键字 请求编译器让变量a直接放在寄存器里面,速度快 b)在c语言中 register修饰的变量 不能取地址 c)C++中可以取得register变量的地址;C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效。

6、变量检测增强 1)C语言中,重复定义多个同名的全局变量是合法的; 2)C+不允许定义多个同名全局变量;直接拒绝这种二义性做法

int vars;int vars=1; //合法,最终C语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上,但在C++中就不行.

7、struct类型加强 1)C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型 2)C++中的struct是一个新类型的定义声明

struct Student{char name[100];int age;};int main(int argc, char *argv[]){Student s1 = {"wang", 1}; //新的数据类型studentStudent s2 = {"wang2", 2};return 0;}

8、C++中所有的变量和函数都必须有类型 1)C++中所有的变量和函数都必须有类型 2)C语言中的默认类型在C++中是不合法的

//函数f的返回值是什么类型,参数又是什么类型?//函数g可以接受多少个参数?//更换成.cpp试试f(i){printf("i = %d\n", i);}g(){return 5;}int main(int argc, char *argv[]){f(10);printf("g() = %d\n", g(1, 2, 3, 4, 5));getchar();return 0;}/*总结:在C语言中int f( );表示返回值为int,接受任意参数的函数int f(void);表示返回值为int的无参函数在C++中int f( );和int f(void)具有相同的意义,都表示返回值为int的无参函数C++更加强调类型,任意的程序元素都必须显示指明类型*/

9、新增Bool类型关键字 1)C++中的布尔类型 C++在C语言的基本类型系统之上增加了bool,C++中的bool可取的值只有true和false,理论上bool只占用一个字节,如果多个bool变量定义在一起,可能会各占一个bit,这取决于编译器的实现,true代表真值,编译器内部用1来表示,false代表非真值,编译器内部用0来表示,bool类型只有true(非0)和false(0)两个值,C++编译器会在赋值时将非0值转换为true,0值转换为false.

int main(int argc, char *argv[]){int a;bool b = true;printf("b = %d, sizeof(b) = %d\n", b, sizeof(b));//b = 4;a = b;printf("a = %d, b = %d\n", a, b);//b = -4;//a = b;printf("a = %d, b = %d\n", a, b);//a = 10;//b = a;printf("a = %d, b = %d\n", a, b);//b = 0;printf("b = %d\n", b);system("pause");return 0;}

10、三目运算符功能增强 1)C语言返回变量的值;//相当于 111 = 30,且表达式结果放在寄存器中。 2)C++语言是返回变量本身;C语言中的三目运算符返回的是变量值,不能作为左值使用;C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方。*(a < b ? &a : &b) = 30通过这样的方式实现的。因此C++这样也可以int z =(a < b ? a : b ); 2)三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用(a < b ? 1 : b )= 30; 3)C语言如何支持类似C++的特性呢? ====>当左值的条件:要有内存空间;C++编译器帮助程序员取了一个地址而已 思考:如何让C中的三目运算法当左值呢?

int main(){int a = 10;int b = 20;//返回一个最小数 并且给最小数赋值成3//三目运算符是一个表达式 ,表达式不可能做左值(a const int a = 10;int *p = (int*)&a;printf("a===>%d\n", a);//输出10*p = 11;printf("a===>%d\n", a);//输出11被修改。C的缺点,但在C++中以修补printf("Hello......\n");return 0;}

【那么思考C++中是通过什么方式实现的?】

C++编译器对const常量的处理:当碰见常量声明时,在符号表中放入常量 =问题:那有如何解释取地址编译过程中若发现使用常量则直接以符号表中的值替换编译过程中若发现对const使用了extern或者&操作符,则给对应的常量分配存储空间(兼容C)?联想: int &a = 1(err) & const int &a = 10(ok)?

在这里插入图片描述

注意:C++编译器虽然可能为const常量分配空间,但不会使用其存储空间中的值。结论:C语言中的const变量C语言中const变量是只读变量,有自己的存储空间C++中的const常量可能分配存储空间,也可能不分配存储空间当const常量为全局,并且需要在其它文件中使用 //分配空间当使用&操作符取const常量的地址 //分配空间

3)const和#define相同与不同之处 C++中的const常量类似于宏定义 const int c = 5; ≈ #define c 5 C++中的const常量与宏定义不同 const常量是由编译器处理的,提供类型检查和作用域检查 宏定义由预处理器处理,单纯的文本替换

//练习 解释为什么//#define N 10int main(){// int a = 1;//int b = 2;// int array[a + b ] = {0};//这种在c c++中都不行,但是liux支持const int a = 1;const int b = 2;#define N 10int array[a + b ] = {0};//这种也可以int array[a + N ] = {0};//这种可以int i = 0;for(i=0; i#define a 10const int b = 20;//#undef a # undef //卸载宏}void fun2(){printf("a = %d\n", a);//printf("b = %d\n", b);}int main(){fun1();fun2();return 0;}

结论: a) C语言中的const变量 b) C语言中const变量是只读变量,有自己的存储空间

c)C++中的const常量 d)可能分配存储空间,也可能不分配存储空间 e)当const常量为全局,并需要在其它文件中使用,会分配存储空间 f)当使用&操作符,取const常量的地址时,会分配存储空间 g)当const int &a = 10; const修饰引用时,也会分配存储空间

ze式如何区分框架结构,剪力墙结构,框架剪力墙结构?有什么优 ...结构简式的烯烃ze命名怎么命名? - 知乎日本女性机器人走红,内部结构媲美真人,网友:这和真人有 ...M80-4T10205F1-07-321-12-321,M80-4T10205F1-07-321 …【浩善家居床实木床新中式主卧轻奢1.5米双人床1.8m胡桃木 ...定点数和浮点数是按数的________来区分的,定点运算器的结构 ...细胞生物学试题库及答案.docmyisam和innodb的区别(myisam和innodb的区别 索引结构)深入PHP内核 - 弱类型变量原理探究常用的分析ELF文件的命令(readelf、objdump及od)Python-错误和异常处理Docker(狂神说)笔记重新学习Mysql数据库5:根据MySQL索引原理进行分析与优化mysql 优化方法有哪些?MySQL索引和SQL调优手册Linux面试题:50道一次分享给你,至少要答上一半!干货篇:深入剖析 MySQL 索引和 SQL 调优实战必知必会,程序员都应该会的Linux的50个知识点!zavl的基本结构中国人在发表英文论文时汉字姓名究竟应该如何写?干货:MySQL 索引原理及慢查询优化zigbee—MAC层帧结构从零开始学Docker(超详细讲解+案例分析)计算机二级《Java》备考训练题及答案2017MySQL索引和SQL调优mysql索引Docker学习记录PHP的运行机制与原理(底层)开发人员必学!这篇入门你必须了解!搞懂这些直接来阿里入职深入剖析 MySQL 索引和 SQL 调优实战数据库----库的操作(字符集、校验规则、修改数据库、删除数据库)HTML基本代码 - osc_m8gznli2的个人空间 - OSCHINA - 中文开源技术交流社区“架构”到底指什么MySQL 索引原理及慢查询优化
ze构型命名ze构型怎么命名ze构型哪个是顺ze异构体ze命名规则ze构象构型zee和z构型ze构型是什么判断ZE构型ze构型哪个是顺ze结构如何命名ze构型怎么命名ze构型和rs构型ZE构型判断优先顺序ze结构和顺反的区别z的结构是什么ze构型是什么意思矢量图是什么意思例子日系狐狸面具动漫情侣跳绳跳一千个相当于跑步多少米形容烟雾的成语狗得了真菌皮肤病怎么用药大师自画像拼音d的笔顺笔画顺序表商店营业执照办理手续加西亚最新比赛视频阿尔塔米拉洞窟壁画有野牛驯鹿南宁市宫颈癌疫苗在哪里预约