
c++
husthg
这个作者很懒,什么都没留下…
展开
-
C++编程bug积累
1、while循环中的size_t型变量 size_t即unsigned int,如下面语句 size_t i=2; while(i>=0) { .... i--; } 会进入死循环,因为当i=0再继续减1之后便溢出,变成最大值。 2、二维数组内存释放问题 int **p=new int *[2]; for(int i=0;i { p[i]=new int[原创 2014-11-09 16:49:26 · 358 阅读 · 0 评论 -
define与typedef区别与联系
define与typedef区别与联系 1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正 确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如: #define PI 3.1415926 程序中的:area=PI*r*r 会替换为3.1415926*r*r 如果你把#define语句中的数字9 写成字母g 预转载 2014-11-09 17:03:38 · 331 阅读 · 0 评论 -
const 和 #define区别
(1) 编译器处理方式不同 define宏是在预处理阶段展开。 const常量是编译运行阶段使用。 (2) 类型和安全检查不同 define宏没有类型,不做任何类型检查,仅仅是展开。 const常量有具体的类型,在编译阶段会执行类型检查。 (3) 存储方式不同 define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。转载 2014-11-09 17:06:54 · 355 阅读 · 0 评论 -
static_cast, dynamic_cast, const_cast探讨
首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 第1部分. 隐式类型转换 又称为“标准转换”,包括以下几种情况: 1) 算术转换(Arithmetic conversion) : 在混合类型的算术表达式中, 最宽的数据类型成为目标转换类型。 int ival = 3; double dval = 3.14159;转载 2014-11-09 17:20:41 · 303 阅读 · 0 评论 -
C++11 lambda表达式
C++11引入了lambda表达式,使得程序员可以定义匿名函数,该函数是一次性执行的,既方便了编程,又能防止别人的访问。 Lambda表达式的语法通过下图来介绍: 这里假设我们定义了一个如上图的lambda表达式。现在来介绍途中标有编号的各个部分是什么意思。 Lambda表达式的引入标志,在‘[]’里面可以填入‘=’或‘&’表示该lambda表转载 2014-11-06 20:31:14 · 335 阅读 · 0 评论 -
C++内联函数
1.函数调用原理 "编译过程的最终产品是可执行程序--由一组机器语言指令组成。运行程序时,操作系统将这些指令载入计算机内存中,因此每条指令都有特定的内存地址。计算机随后将逐步执行这些指令。有时(如有循环和分支语句时),将跳过一些指令,向前或向后跳到特定地址。常规函数调用也使程序跳到另一个地址(函数的地址),并在函数结束时返回。下面更详细地介绍这一过程的典型实现。执行到函数调用指令时,程序转载 2017-04-14 15:51:00 · 376 阅读 · 0 评论