随笔分类 -  C/C++基础

摘要:虚函数表是在什么时期建立的? 最近参加阿里巴巴公司的内推,面试官问了“虚函数表是在什么时期建立的?”。因为以前对虚函数表的理解不够多,所以就根据程序构建(Build)的四个过程(预编译、编译、汇编和链接),推导出虚函数表应该是在编译期确定的,原因如下: 1)预编译器主要处理那些源代码文件中的以“... 阅读全文
posted @ 2015-07-26 22:29 峰子_仰望阳光 阅读(16409) 评论(5) 推荐(9) 编辑
摘要:函数指针 函数指针是指向函数调用地址的指针。它和函数名究竟有什么关系呢?且看下文。且看一小程序 首先,先请看下边程序: 1 #include 2 #include 3 using namespace std; 4 5 void func(string s) 6 { 7 cout ... 阅读全文
posted @ 2015-07-23 22:17 峰子_仰望阳光 阅读(5040) 评论(0) 推荐(0) 编辑
摘要:注意,这里所说的堆区和栈区指的是(虚拟)内存区域,跟数据结构中的堆栈不一样。栈区和堆区概念 栈区(stack)—— 由编译器自动分配释放,存放局部变量的值、函数调用所需要维护的信息等。 栈区必须满足这样一条规则:先入栈的数据后出栈(First In Last Out, FILO)。 堆区(h... 阅读全文
posted @ 2015-07-23 21:02 峰子_仰望阳光 阅读(805) 评论(0) 推荐(0) 编辑
摘要:本文将简要介绍智能指针shared_ptr和unique_ptr,并简单实现基于引用计数的智能指针。使用智能指针的缘由 1. 考虑下边的简单代码:1 int main()2 {3 int *ptr = new int(0);4 return 0;5 } 就如上边程序,我们有可... 阅读全文
posted @ 2015-07-14 15:21 峰子_仰望阳光 阅读(28075) 评论(6) 推荐(3) 编辑
摘要:本文转自博文C/C++预处理指令#define,#ifdef,#ifndef,#endif…。这篇博文写得特别好,特转载。 本文主要记录了C/C++预处理指令,常见的预处理指令如下:#空指令,无任何效果#include包含一个源代码文件#define定义宏#undef取消已定义的宏#if如果给... 阅读全文
posted @ 2015-06-23 10:25 峰子_仰望阳光 阅读(6328) 评论(0) 推荐(1) 编辑
摘要:本文将主要从static在C和C++共有的作用及C++特有的作用两个方面进行解析。在C和C++中共有的作用隐藏(对变量、函数均可) 当同时编译多个文件时,所有未加static前缀的全局变量或全局函数都具有全局性。举例来说明,同时编译两个源文件,一个是a.c,另一个是main.c,如下:1 //... 阅读全文
posted @ 2015-06-21 12:05 峰子_仰望阳光 阅读(2037) 评论(0) 推荐(0) 编辑
摘要:此文转自微软MSDN。注意这是在Windows上才有的,Linux上可没有。#pragma comment( comment-type [,"commentstring"] ) 备注 comment-type是一个预定义的标识符(如下所述),它指定了注释记录的类型。可选commentstri... 阅读全文
posted @ 2015-04-09 23:44 峰子_仰望阳光 阅读(2559) 评论(0) 推荐(2) 编辑
摘要:1.源文件转换为可执行文件源文件经过以下几步生成可执行文件:1、预处理(preprocessor):对#include、#define、#ifdef/#endif、#ifndef/#endif等进行处理2、编译(compiler):将源码编译为汇编代码3、汇编(assembler):将汇编代码汇编为... 阅读全文
posted @ 2015-03-27 17:04 峰子_仰望阳光 阅读(718) 评论(0) 推荐(0) 编辑
摘要:此文转自吴秦先生的C++静态库与动态库。对吴先生此博文只想说,实在是太精彩了!1. 什么是库库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执... 阅读全文
posted @ 2015-03-25 11:14 峰子_仰望阳光 阅读(527) 评论(0) 推荐(0) 编辑
摘要:对于C++中的IO操作,博主nbkyzj的三篇文章概括的特别详细,非常值得参考。这三篇文章是: C++之标准设备IO操作流 C++之预定义类型IO格式控制 C++之文件IO操作流 下文将会部分参考自这三篇文章。 1.C++之标准设备IO操作流 每种语言系统都会提供IO操作的类库,用于... 阅读全文
posted @ 2015-03-24 10:03 峰子_仰望阳光 阅读(537) 评论(0) 推荐(0) 编辑
摘要:1. C语言中的伪随机数产生函数 本节主要参考自一博文及cppreferrence. 我们知道rand()函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数,是根据一个数(我们可以称它为种子)为基准以某个递推公式推算出来的一系列数,当这系列数很大的时候,就符合正态公布,从而相... 阅读全文
posted @ 2015-03-21 13:16 峰子_仰望阳光 阅读(1610) 评论(1) 推荐(1) 编辑
摘要:本文后半部分摘录自博文C/C++刁钻问题各个击破之细说sizeof。一个小例子 今天在编程的时候,简单地用下边的程序求vector容器内的元素个数:vector vec;for (int i = 0; i vec_int;vector vec_char;vector vec_double... 阅读全文
posted @ 2015-02-26 23:19 峰子_仰望阳光 阅读(592) 评论(0) 推荐(0) 编辑
摘要:本文摘自林锐博士的《高质量C++/C编程指南》。 成员函数的重载、覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防。1.重载与覆盖 成员函数被重载的特征: (1)相同的范围(在同一个类中); (2)函数名字相同; (3)参数不同; (4)vi... 阅读全文
posted @ 2014-11-27 23:30 峰子_仰望阳光 阅读(284) 评论(0) 推荐(0) 编辑
摘要:不同于C语言中的malloc/free是库函数,C++语言中的new/delete是运算符,而不是库函数。new/delete执行流程 我们经常会接触到的是new/delete operator(就是new/delete运算符)。其中new operator背后会调用operator new和... 阅读全文
posted @ 2014-11-10 18:37 峰子_仰望阳光 阅读(808) 评论(0) 推荐(0) 编辑
摘要:此文整理自C++_友元函数及模板友元。 1. 引入友元函数原因 在实现类之间数据共享时,减少系统开销,提高效率。 具体来说:为了使其他类的成员函数直接访问该类的私有变量。 即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。 优点:能够提高效... 阅读全文
posted @ 2014-10-22 21:02 峰子_仰望阳光 阅读(278) 评论(0) 推荐(0) 编辑
摘要:可参考自: C++之标准设备IO操作流 C++之预定义类型IO格式控制 C++之文件IO操作流 阅读全文
posted @ 2014-10-21 19:18 峰子_仰望阳光 阅读(177) 评论(0) 推荐(0) 编辑
摘要:本文主要整理自C++之运算符重载及C++运算符重载总结。什么是运算符重载 运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用域不同类型的数据导致不同行为的发生。如:1 int i;2 int i1=10,i2=10;3 i=i1+i2;4 std::coutreal = real; 9... 阅读全文
posted @ 2014-10-21 17:18 峰子_仰望阳光 阅读(1000) 评论(1) 推荐(0) 编辑
摘要:原文链接:http://blog.csdn.net/csdnji/article/details/169200 左值(lvalue)和右值(rvalue)是编程中两个非常基本的概念,但是也非常容易让人误解,看了很多文章,自我感觉真正将这个问题讲的很透彻的文章还没有看见,所以自告奋勇来尝试一下。如果... 阅读全文
posted @ 2014-10-21 13:37 峰子_仰望阳光 编辑
摘要:本文主要整理自博文C++中的指针与引用及C++中引用传递与指针传递区别(进一步整理)。指针和引用的定义指针 对于一个类型T,T*就是指向T的指针类型,也即一个T*类型的变量能够保存一个T对象的地址,而类型T是可以加一些限定词的,如const、volatile等等。见下图,所示指针的含义: 引... 阅读全文
posted @ 2014-10-21 13:20 峰子_仰望阳光 阅读(387) 评论(0) 推荐(0) 编辑
摘要:在编写含有模板的程序的时候,我还是按照一个头文件声明,一个源文件的方法来组织,结果编译的时候总出现一些很奇怪的语法问题,但程序明明是没有问题的。后来经过查阅才知道原来是因为C++编译器不支持对模板的分离式编译,详细原因可参考博文为什么C++编译器不能支持对模板的分离式编译。所以,我在编写程序的时... 阅读全文
posted @ 2014-10-18 00:12 峰子_仰望阳光 阅读(563) 评论(0) 推荐(0) 编辑