摘要:
C++源文件从文本到需要四个过程: 预处理阶段 编译器把源文件包含的头文件、预编译语句(宏定义)进行分析替换,生成预编译文件(.i). 编译阶段 编译器进行语法分析、语义分析,语法检查无误后把代码翻译为汇编语言,将预编译文件(.i)转换为汇编代码,生成汇编文件(.s). 汇编阶段 把编译阶段生成的汇 阅读全文
摘要:
目前,鉴于工作需求,为了提升自己的编码能力,与编码规范性。作者研究《Effective C++》一书,接下来将陆续做一些总结,与大家分享,供大家学习。 1.C++语言已经是个多重范型的编程语言,C++语言可被看作一个语言联邦,四个次语言是:1)C;2)Object-Oriented C++;3)Te 阅读全文
摘要:
define 用define 定义的常量: 没有类型的不进行类型安全检查,可能会产生意想不到的错误,所给出的是一个立即数,编译器只是把所定义的常量值与所定义的常量的名字联系起来,define 所定义的宏变量在预处理阶段的时候进行替换,在程序中使用到该常量的地方都要进行拷贝替换; 用 define 可 阅读全文
摘要:
谈到自由存储区与堆的区别,就需要了解new与malloc的区别。 实际上堆是C语言的关键术语,是操作系统所维护的一块特殊内存,它提供了动态分配的功能。用户使用malloc进行堆内存申请,使用free实现堆内存的释放。 但自由存储区不同,它是C++中的一个抽象的概念。C++中规定使用new/delet 阅读全文
摘要:
栈和堆作为C++内存中的动态数据区,在程序执行过程中被动态的申请与释放,是C++内存管理中非常重要的环节。 在程序执行过程中,堆和栈有不同的分工,两者的区别为: 栈 堆 编译器自动申请与释放 用户手动申请与释放 连续存储结构,不会造成内存碎片 链式存储结构,容易造成内存碎片 编辑器自动处理,不会造成 阅读全文
摘要:
C++是一门追求极致性能的语言,合理的内存管理能够缔造出极致性能的代码,否则,不合理的内存管理,会成为日常隐患,产生一系列的BUG。 Linux下操作系统程序地址空间的内存管理分布图如下所示: C++程序在执行时,内存区域主要可以分为四个部分:栈、堆、全局区(静态数据区)、代码段。 栈区: 由编译器 阅读全文
摘要:
C++支持C语言的强制类型转换,并提供了四种应对各种的强制类型函数,以下对C++的强制类型转换做简单介绍。 1.C语言风格强制类型转换 1 TypenameB b; 2 TypenameA a=(TypenameA)b; C语言风格类型强制转换存在较多安全隐患,例如: 1)把一个指向 const 对 阅读全文
摘要:
C++语言在编译的时候为了解决函数的多态问题,建立了与C语言编译器不同的函数名修饰规则,C++语言在编译的时候会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接阶段无法找到对应函数的情况。因此,C函数就需要用extern “C”进行链接指定,通知编译器以下函数或文件中函数 阅读全文
摘要:
extern是外部声明关键字,字面意思就是声明某种变量或函数,在外部定义。 extern声明变量的两种方法 1.在其他文件中直接extern 1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 extern int a 阅读全文
摘要:
C++ 不定长输入,保存进数组,并打印 1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 5 int main() { 6 vector<int> arr; 7 int i; 8 do { 9 cin >> i; 1 阅读全文