C++重点笔记
来源:互联网 发布:linux pid kill 编辑:程序博客网 时间:2024/04/28 17:45
我最近在应聘时遇到了面试官提出的一些C++问题,很多没答准确。现在记录下来,慢慢积累,希望以后也能够温故而知新。
#pragma once与 #ifndef的优缺点对比
为了避免同一个文件被include多次
1 #ifndef方式(#include 防范,有时被称作宏防范)
2 #pragma once方式
在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。
方式一:
#ifndef __SOMEFILE_H__
#define __SOMEFILE_H__
... ... // 一些声明语句
#endif
方式二:
#pragma once
... ... // 一些声明语句
#ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。当然,缺点就是如果不同头文件的宏名不小心“撞车”,可能就会导致头文件明明存在,编译器却硬说找不到声明的状况。
#pragma once则由编译器提供保证:同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。带来的好处 是,你不必再费劲想个宏名了,当然也就不会出现宏名碰撞引发的奇怪问题。对应的缺点就是如果某个头文件有多份拷贝,本方法不能保证他们不被重复包含。当然,相比宏名碰撞引发的“找不到声明”的问题,重复包含更容易被发现并修正。
方式一由语言支持所以移植性好,方式二可以避免名字冲突。
堆和栈的区别
一、预备知识—程序的内存分配
一个由c/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
4、文字常量区—常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。
二、例子程序
这是一个前辈写的,非常详细
//main.cppint a = 0; // 全局初始化区char *p1; // 全局未初始化区main(){ int b; // 栈 char s[] = "abc"; // 栈 char *p2; // 栈 char *p3 = "123456"; //123456\0在常量区,p3在栈上。 static int c =0; // 全局(静态)初始化区 p1 = (char *)malloc(10); p2 = (char *)malloc(20); // 分配得来得10和20字节的区域就在堆区。 strcpy(p1, "123456"); //123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。}
参考:
#pragma once与 #ifndef的优缺点对比 http://eyuanhermit.blog.hexun.com/27995908_d.html
堆和栈的区别 http://eyuanhermit.blog.hexun.com/29128854_d.html
- C++Primer (第四版) 重点笔记
- Pointers on C 重点笔记 第一章
- Pointers on C 重点笔记 第二章
- Pointers on C 重点笔记 第三章
- C/C++求职宝典重点笔记整理
- 数据结构与算法分析-C语言描述 重点笔记
- C语言重点
- c语言笔试重点
- C 语言重点知识
- 【Accelerated C++】重点回顾
- 【Accelerated C++】重点回顾
- C/C++面试重点
- C/C++重点知识点
- C/C++重点知识点
- 计算机网络原理笔记.重点
- C++重点笔记
- MFC重点笔记
- css笔记重点
- hdu :Tian Ji -- The Horse Racing 之贪心算法
- printf、sprintf与fprintf 的用法区分
- 将博客搬至CSDN
- Redhat没有注册时yum安装的错误解决
- exit(0)与exit(1)、return区别
- C++重点笔记
- 实现在退出activity或按back键的侧滑功能
- 码农为什么要辞职去做一个美发收银软件?
- cocos2d-x Tests讲解四:box2dTest(物理引擎)
- 杭电2058 超时
- 做Bowtie2可视化时候学到的一些
- 04 Cocos2D-X引擎框架
- leetcode - Distinct Subsequences
- ibatis扩展支持主键生成的方法(非数据库方式)