高质量程序设计指南C/C++语言——C++/C程序设计入门
1、在C++/C中,全局变量(extern或static)存放在程序的静态数据区中,在程序进入main()之前创建,在main()结束之后销毁,因此在我们的代码中根本没有机会初始化它们,于是语言及其实现就提供了一个默认的全局初始化器0。如果你没有明确地给全局变量提供初值,编译器就会自动地将0转换为所需要的类型来初始化它们。函数内的static局部变量和类的static数据成员都具有static存储类型,因此最终被移到程序的静态数据区中,也会被默认初始化为0,除非你明确地提供了初值。但是自动变量的初始化则是程序员的责任,因为它们是运行时在堆栈上创建的并且可以在运行时由程序员来初始化的,不要指望编译器会给它一个默认的初值。
2、要区分初始化和赋值的不同。前者发生在对象(变量)创建的同时,而后者是在对象创建后进行的。
3、全局变量的初始化、数据类型的隐式转换、类的隐含成员的初始化等都是编译器的责任,而局部变量的初始化、强制类型转换、类的非静态数据成员的初始化等都是程序员的责任。

4、“编译时”起作用:
预编译伪指令、类(型)定义、外部对象声明、函数原型、标识符、各种修饰符号(const、static等)及类成员的访问说明符(public、private、protected)和连接规范、调用规范等仅在编译器进行语法检查、语义检查和生成目标文件(.obj或.o文件)及连接时起作用的,在可执行程序中不存在这些东西。
5、“运行时”起作用:
容器越界访问、虚函数动态决议、函数动态连接、动态内存分配、异常处理和RTTI等则是在运行时才会出现和发挥作用的。

6、标准C语言支持的基本(内建)数据类型有int、long、float、double、char、void以及它们和signed、unsigned、*、&等的组合。标准C++在这些类型的基础上增加了bool类型,并同时增加了两个内置的符号常量true、false(关键字)。
7、void是“空”类型(无值型),意思这种类型的大小无法确定。显然不能声明void类型的对象或是将sizeof()运算符用于void类型,C++/C不能对一个大小未知的对象直接操作。
8、某些基于RISC(精简指令集计算机)的CPU,对内存中基本数据类型的变量采用高字节(BYTE)和高字(WORD)在低地址存放的Big Endian存储格式,并且把最高字节的地址作为变量的首地址。在这种自然的存储格式中,要求变量在内存中的存放位置必须自然对齐,否则CPU会报告异常。
9、Intel系列的CPU采用Little Endian存储格式来存放基本类型变量,即低字节和低字在低地址存放,并且把最低字节的地址作为变量的首地址。在Intel系列CPU这种硬件平台上,不要求基本类型变量在内存中必须自然对齐。如果变量没有自然对齐,可能会在一定程度上降低CPU访问该变量的性能,但不会影响程序的正确性。
10、一个低级数据类型对象总是优先转换为能够容纳得下它的最大值的、占用内存最少的高级类型对象。例如100(类型为int)如果转换成long型就能满足编译器的要求,那就不会转成double型。
11、标准C语言允许任何非void类型指针和void类型指针之间进行直接的相互转换。但在C++中,可以把任何类型的指针直接指派给void类型指针,但不能反过来将void类型指针直接指派给任何非void类型指针,除非进行强制转换。因此,在C语言环境中我们就可以先把一种具体类型的指针如int *转换为void *类型,再把void *类型转换为double *类型,而编译器不会认为是错误的。这样的做法存在着不易察觉的安全问题(内存扩张和截断等),这是标准C的一个缺陷。
高质量程序设计指南C/C++语言——C++/C程序设计入门的更多相关文章
- 高质量程序设计指南C/C++语言——C++/C程序设计入门(4)
*switch结构的break语句只是一个“jmp”指令,其作用就是跳到switch结构的结尾处 *标准C++/C语言提供3种循环:do/while.while和for,它们都在条件表达式为TRUE( ...
- 高质量程序设计指南C/C++语言——C++/C程序设计入门(2)
*标准C规定,编译器只取前31个字符作为有效的标识符,而标准C++则取前255个字符作为有效的标识符. *把具有特殊含义的字符输出到终端上,尤其是当它们出现在普通字符串或格式控制字符串中时,一般来说有 ...
- 高质量程序设计指南C/C++语言——C++/C程序设计入门(3)
- C++/C高质量编程指南-笔记
复习: C/C++高质量编程指南: [规则1-2-1]为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块. [规则1-2-2]用 #include <file ...
- 指针,数组,字符串的区别(高质量程序设计指南C++/C语言第7章)
指针: 指针是变量,和平时的那些变量没有本质的差异,不同的只是它的值和类型,.,即解释方式 二进制层面:指针的值是内存单元的地址,而变量是引用内存单元值的别名 语言层面:指针的值就是变量的地址. 对象 ...
- 高质量程序设计指南C/C++语言——malloc/free使用要点
- 高质量程序设计指南C/C++语言——有了malloc/free为什么还要new/delete?
- 高质量程序设计指南C/C++语言——内存管理
• free()和delete只是把指针所指的内容给释放掉,并没有把指针本身删掉.指针被free()或delete以后其地址仍然不变(不等于NULL),只是该地址对应的内存是垃圾——p成了野指针.如果 ...
- 高质量程序设计指南C/C++语言——C++/C常量(2)
随机推荐
- 【转】C#实现MD5加密
转自:C#实现MD5加密 常用的如下: 方法一 首先,先简单介绍一下MD5 MD5的全称是message-digest algorithm 5(信息-摘要算法,在90年代初由mit laborator ...
- Python 安装、循环语句、数据类型(一)
一.关于版本的选择 Should i use Python 2 or Python 3 for my development activity?转载自Python官网 Short version: P ...
- https tomcat 证书搭建
首先生成证书说明 keytool -genkey -alias castest -keyalg RSA -keystore c:/keys/caskey 先让输入密码,密码必须记住,下面会用到 其中“ ...
- FPGA知识大梳理(四)FPGA中的复位系统大汇总
本文整合特权(吴厚航)和coyoo(王敏志)两位大神的博文.我也很推崇这两位大神的书籍,特权的书籍要偏基础一下,大家不要一听我这么说就想买coyoo的.我还是那一句话,做技术就要step by ste ...
- Qt实战之开发CSDN下载助手 (3)(结束篇)
再次申明下,开发这款助手,主要是用来学习交流,并不是用来开发什么刷积分的软件. 好了,言归正传,这次,主要的分析下CSDN的下载,评论,验证码获取机制等等. 好,回到第二篇,当我们成功登陆时,CSDN ...
- nodejs--express开发个人博客(2)
上一部分已经实现了视图的雏形,现在加上逻辑操作. 登陆.注册.文章发表都需要用到数据库的数据存取,用的比较多的就是mongodb了. MongoDB 是一个对象数据库,它没有表.行等概念,也没有固定的 ...
- Java算法——O(n)查询数列中出现超过半数的元素
主要思想: 相邻元素两两比较,如果相同存入新数组,不同二者都删除.如果 某数出现次数超高n/2,则最后剩下的1元素为所求. public static int findMostElem(final A ...
- BZOJ 4260: Codechef REBXOR( trie )
求出前缀和, 那么以第x个元素结尾的最大异或值是max(sumx^sump)(1≤p<x), 用trie加速. 后缀同理, 然后扫一遍就OK了.时间复杂度O(31N) ------------- ...
- js this [转]
this是js的一个关键字,随着函数使用场合不同,this的值会发生变化.但是总有一个原则,那就是this指的是调用函数的那个对象. 1.纯粹函数调用. function test() { this. ...
- geoserver图层属性查询及查询结果转换为arcgis js api能使用的格式
一个项目使用了ArcGIS JS API开发GIS展示层,但GIS服务使用了Geoserver,这时加载Geoserver数据和查询数据就和之前完全不一样了,以下介绍下我使用ArcGIS JS API ...