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. 删除Mac中所有 .DS_Store 隐藏文件

    删除Mac中所有 .DS_Store 隐藏文件 35•36509感谢 longago 分享于 2012-07-06 12:01|只看该作者|倒序浏览|打印 Safari 5.1.7 Mac OS X ...

  2. 转:PAT练习题概览

    AT(pat.zju.edu.cn)是一个面向 C/C++程序的 Online Judge 系统.相比 ZOJ,HDOJ,POJ 等 ACM 题库,PAT 的题目非常基础,对于数据结构.算法的入门是比 ...

  3. Laravel后台 + AngularJS前端 的网站构建与维护

    最近维护的报修网站,采用Laravel+AngularJS框架搭建,还有很多东西需要熟悉掌握,现将修复的Bug或添加的功能中值得记录的地方总结如下. 其中,需要注意的问题基本是原因不明且不是太严重的问 ...

  4. java--String常量池问题的几个例子

    关于string内存分配不错的博客:http://blog.csdn.net/rj042/article/details/6871030 String常量池问题的几个例子 示例1: Java代码 St ...

  5. Android中获取系统的时间

    activity代码 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); set ...

  6. Runtime.exec使用错误导致延迟.md

    这篇文章是纪录了一个bug解决的过程,可是我还是没有可以真正地找出bug的缘由.希望大牛可以详解. 问题的发现 当接触的系统越来越大的时候,对于系统的性能越来越高的时候,找到表面问题的真正原因就慢慢地 ...

  7. 关于Stack Overflow上ASP.NET最大连接数限制提问的一个思考

    原文地址:Why request queuing is high even when request executing is below its limit? We are using below ...

  8. 使CSS3样式在IE里面有效果

    1. 下载ie-css3.htc文件 2. 当前元素一定要有定位属性,像是position:relative或是position:absolute属性. 3. z-index值一定要比周围元素的要高 ...

  9. python之高阶函数编程

    在这篇文章中我指出两点: 第一:系统函数可以被覆盖 比如: a=abs(-10) print a 10 但是,如果把函数本身赋值给变量呢? f = abs f <built-in functio ...

  10. BZOJ 1626: [Usaco2007 Dec]Building Roads 修建道路( MST )

    计算距离时平方爆了int结果就WA了一次...... ------------------------------------------------------------------------- ...