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程序设计入门的更多相关文章

  1. 高质量程序设计指南C/C++语言——C++/C程序设计入门(4)

    *switch结构的break语句只是一个“jmp”指令,其作用就是跳到switch结构的结尾处 *标准C++/C语言提供3种循环:do/while.while和for,它们都在条件表达式为TRUE( ...

  2. 高质量程序设计指南C/C++语言——C++/C程序设计入门(2)

    *标准C规定,编译器只取前31个字符作为有效的标识符,而标准C++则取前255个字符作为有效的标识符. *把具有特殊含义的字符输出到终端上,尤其是当它们出现在普通字符串或格式控制字符串中时,一般来说有 ...

  3. 高质量程序设计指南C/C++语言——C++/C程序设计入门(3)

  4. C++/C高质量编程指南-笔记

    复习: C/C++高质量编程指南: [规则1-2-1]为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块. [规则1-2-2]用 #include <file ...

  5. 指针,数组,字符串的区别(高质量程序设计指南C++/C语言第7章)

    指针: 指针是变量,和平时的那些变量没有本质的差异,不同的只是它的值和类型,.,即解释方式 二进制层面:指针的值是内存单元的地址,而变量是引用内存单元值的别名 语言层面:指针的值就是变量的地址. 对象 ...

  6. 高质量程序设计指南C/C++语言——malloc/free使用要点

  7. 高质量程序设计指南C/C++语言——有了malloc/free为什么还要new/delete?

  8. 高质量程序设计指南C/C++语言——内存管理

    • free()和delete只是把指针所指的内容给释放掉,并没有把指针本身删掉.指针被free()或delete以后其地址仍然不变(不等于NULL),只是该地址对应的内存是垃圾——p成了野指针.如果 ...

  9. 高质量程序设计指南C/C++语言——C++/C常量(2)

随机推荐

  1. C# Convert an enum to other type of enum

    Sometimes, if we want to do convert between two enums, firstly, we may think about one way: var myGe ...

  2. (Problem 62)Cubic permutations(待续)

    The cube, 41063625 (3453), can be permuted to produce two other cubes: 56623104 (3843) and 66430125 ...

  3. IOS 学习笔记(5) 控件 文本视图(UITextView)的使用方法

    相对于UILabell所支持的较短文本内容,UITextView对于长文本的支持更好.UITextView能够以滚动的方式全部浏览到长文本,并且就像UILabel那样,从ISO6,他也提供了对NSAt ...

  4. COB封装的优势

    随着固态照明技术的不断进步,COB(chip-on-board)封装技术得到越来越多的重视,由于COB光源有热阻低,光通量密度高,眩光少,发光均匀等特性,在室内外照明灯具中得到了广泛的应用,如筒灯,球 ...

  5. MSSQL SERVER 2008 R2 无法连接到数据库,用户sa登录失败,错误:18456

    原因:勾选了强制实施密码策略,但是设置的密码很简单依然可以,比如:123456 这是为什么?原来,这个功能要用到NetValidatePasswordPolicy() API这个函数. (该功能只有在 ...

  6. HDU 2722 Here We Go(relians) Again

    最短路,建图太麻烦,略过…… #include <cstdio> #include <cstring> #include <queue> const int INF ...

  7. [uva 11762]Race to 1[概率DP]

    引用自:http://hi.baidu.com/aekdycoin/item/be20a91bb6cc3213e3f986d3,有改动 题意: 已知D, 每次从[1,D] 内的所有素数中选择一个Ni, ...

  8. QQ聊天原理初识

    1:qq之间文件的传输是通过p2p通信进行的. 2:qq之间的表情发送实际上就是文字的发送,是client再接受到文字之后在本地自己进行转换 3:qq之间的通信既能够通过udp也能够通过Tcp 尽管u ...

  9. Objective-c 访问控制

    在Objective-c中定义类时,也可以使用类似于C++中public.private来修饰成员变量,如下: @intterface Test:NSObject{ @public int i; in ...

  10. 简单JSONP跨域请求

    JSONP原理:利用<script>标签的src属性实现跨域的请求.可在URL中提供回调函数的名字.后台进过处理后将数据以回调函数参数的形式返回. demo:JSONP请求不同端口的数据 ...