这几天看了下这本书<编写高质量代码_改善C++程序的150个建议>,觉的蛮有收获的,再次记录下自己以前不清晰的知识点,以供学习. 编写符合标准的main函数 C语言标准规定了main函数的两种标准形式: int main(void) int main(int argc, char* argv[]) C++03标准中给出了两种main函数的定义方式 int main() int main(int argc, char *argv[]) 上述标准都要求main函数返回一个整型数值 extern C…
19. 明白在c++中如何使用c c++可以兼容c的绝大部分代码,但是还是有一部分不能兼容. c语言的编译器在调用函数时会把函数翻译成 : "_函数名",例如: int nasa(int a,intb) c语言编译器会将其翻译成:"_nasa"的形式,当调用此函数时就去寻找这个字符串. c++语言的编译器在调用函数时会把函数翻译成:"_函数名_参数类型_参数类型",例如: int nasa(int a,int a) c++编译器会将其翻译成:&q…
12.优先使用前置操作符 #include <iostream> using namespace std; class A { private: int num; public: A operator++(); //前置++ A operator++(int); //后置++ }: A A::operator++() { (*this).num=(*this).num+1; //无须构造一个临时对象 return (*this); } A A::operator++(int) { A p1;…
10. 优化结构体中元素的布局 结构体变量所占空间大小并不是其所含类型所占字节数之和,其所占内存字节数涉及到字节对齐. 字节对齐 :变量在内存中储存都是以字节数为单位,每一个字节都有自己的地址,逻辑上变量的首地址(第一个字节的地址)可以是任意位置,但实际不同类型变量其首地址是有一定规则的,这是为了更快的查找便于存取(牺牲空间来换取效率). 结构体变量中的各个类型在内存中存放时也按照一定的规则,并不是简简单单的用连续的内存 挨边存放. 其遵循的规则有: (1)结构体变量的首地址可以被其所含最宽的基…
0. 不要让main 函数返回 void 入口函数main()返回类型应该为 int, 即程序结束时return 0 表示程序正常返回,函数结束时 return -1 值表示程序异常返回, 如果不显式写出 return 语句,编译器会隐式的加上 return 0(并不要以为main函数可以无返回值),在定义main函数时为了不产生误解,应显式加上return 语句. 注意在老版本中的C++中因为只有 int一种类型所以可以不显式写出main函数的返回值,其会默认main函数返回 int类型,但是…
27. 区分内存分配的方式 c++中内存分为5个不同的区 ①栈区 栈是一种特殊的数据结构,其存取数据特点为(先进后出,后进先出).栈区中主要用于存储一些函数的入口地址,函数调用时的实参值以及局部变量.栈区的大小和内存分配由编译器和底层硬件配合完成在函数调用时发挥很大作用,但是程序员不需要关心其的操作(因此起较安全). ②堆区 堆区主要是用户自由分配内存的区域,new(malloc())与delete(free())运算符都是在操作这块区域.因为堆区中内存的申请和释放都是交给程序员自己完成所以比较…
作为一个程序员,对内存溢出问题肯定不陌生,它已经是软件开发历史上存在了近40年的大难题.在内存空间中,当要表示的数据超出了计算机为该数据分配的空 间范围时,就产生了溢出,而溢出的多余数据则可以作为指令在计算机中大摇大摆地运行.不幸的是,一不小心这就成了黑客们可利用的秘密后门,“红色代码”病 毒事件就是黑客利用内存溢出攻击企业网络的“经典案例”.甚至有人称,操作系统中超过50%的安全漏洞都是由内存溢出引起的.众所周知,C/C++语言虽 然是一种高级语言,但是其程序的目标代码却非常接近机器内核,它能…
建议150:使用匿名方法.Lambda表达式代替方法 方法体如果过小(如小于3行),专门为此定义一个方法就会显得过于繁琐.比如: static void SampeMethod() { List<string> list=new List<string>(){"Mike","Rose","Steve"}; var mike = list.Find(new Predicate<string>(HaveLength…
<编写高质量代码-改善java程序的151个建议> --秦小波 第一章.开发中通用的方法和准则 1.不要在常量和变量中出现易混淆的字母 long a=0l; --> long a=0L; 2.莫让常量蜕变成变量 static final int t=new Random().nextInt(); 3.三元操作符的类型无比一致 int i=80; String s=String.valueOf(i<100?90:100); String s1=String.valueOf(i<…
2014-05-16 09:08 by Jeff Li 前言 系列文章:[传送门] 下个星期度过这几天的奋战,会抓紧java的进阶学习.听过一句话,大哥说过,你一个月前的代码去看下,慘不忍睹是吧.确实,人和代码一样都在成长,都在变好其中.有时候仅仅是实现功能的编程,长进不了呀. 博客提供的优点就能够交流,讨论的学习方法你们应该知道. 在这里,我会陆陆续续的进行对<编写高质量代码改善java程序的151个建议>看法,希望大家点击交流. 正文 看这本书原因   1.项目做的仅仅是实现功能,然而没有…