随笔分类 -  C/C++

摘要:本文转自:http://my.oschina.net/renhc/blog/36345面试中如问到memcpy的实现,那就要小心了,这里有陷阱。先看下标准memcpy()的解释:?12void *memcpy(void *dst, const void *src, size_t n);//If co... 阅读全文
posted @ 2015-10-18 17:16 vincently 阅读(2879) 评论(0) 推荐(0)
摘要:有时我们希望显式地将对象强制类型转换成另外一种类型。例如,如果想在下面的代码中执行浮点数除法: int i, j; double slope = i / j; 就要使用某种方法将i和/或j显式地转换成double,这种方法称作强制类型转换。命名的强制类型转换 一个命名的强制类型转换具有如... 阅读全文
posted @ 2015-09-26 10:54 vincently 阅读(23166) 评论(0) 推荐(0)
摘要:解答:#define MIN(A,B) ((A) <= (B) ? (A) : (B)) MIN(*p++, b)会产生宏副作用剖析:这个面试题主要考察宏定义可以实现函数的功能。但是它终归不是函数,宏定义中括弧的”参数“也不是真的参数,在宏展开的时候对”参数“进行的是一对一的替换。C++中另一个进行... 阅读全文
posted @ 2015-09-26 09:29 vincently 阅读(6003) 评论(0) 推荐(1)
摘要:本文转自:http://i.cnblogs.com/EditPosts.aspx?opt=1时常在cpp的代码之中看到这样的代码:#ifdef __cplusplus extern "C" { #endif //一段代码 #ifdef __cplusplus } #endif这样的代码到底是什么意思... 阅读全文
posted @ 2015-09-26 01:12 vincently 阅读(391) 评论(0) 推荐(0)
摘要:在C++中,类的对象建立分为两种,一种是静态建立,如A a;另一种是动态建立,如A* ptr=new A;这两种方式是有区别的。 静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种方法,直接调... 阅读全文
posted @ 2015-09-25 15:03 vincently 阅读(2729) 评论(0) 推荐(0)
摘要:auto_ptr auto_ptr是当前C++标准库中提供的一种智能指针。 auto_ptr在构造时获取某个对象的所有去(ownership),在析构时释放该对象。我们可以这样使用auto_ptr来提高代码安全性:int* p = new int(0);auto_ptr ap(p); 从此我们... 阅读全文
posted @ 2015-09-18 16:55 vincently 阅读(311) 评论(0) 推荐(0)
摘要:来自《Effective C++》条款07:为多态声明virtual析构函数 当derived class对象经由一个base class指针被删除,而该base class带着一个non-virtual析构函数,其结果未有定义——实际执行时通常发生的是对象的derived成分没被销毁,而其基... 阅读全文
posted @ 2015-08-24 21:15 vincently 阅读(966) 评论(0) 推荐(0)
摘要:引用: 引用(reference)是为对象起了另外一个名字,引用类型应用(refers to)另外一种类型。通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名。 一般初始化变量时,初始值会被拷贝到新建的对象中。然而定义引用时,程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用... 阅读全文
posted @ 2015-08-24 13:45 vincently 阅读(296) 评论(0) 推荐(0)
摘要:1 虚函数对应一个vtable,这大家都知道,可是这个vtable其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,无法找到vtable,所以构造函数不能是虚函数。2. 构造函数不需要是虚函数,也不允许是虚函数... 阅读全文
posted @ 2015-08-24 13:21 vincently 阅读(508) 评论(0) 推荐(0)
摘要:这个问题来自于《Effective C++》条款9:永远不要在构造函数或析构函数中调用虚函数 。 假设有如下代码: class Transaction {// 所有交易的基类 public: Transaction(); virtual void log... 阅读全文
posted @ 2015-08-24 11:31 vincently 阅读(5754) 评论(0) 推荐(2)
摘要:C/C++提供了众多的字符串处理函数。它们声明在中。如下所示:strlen(s)返回s的长度,不包括字符串结束符nullstrcmp(s1,s2)比较两个字符串s1和s2是否相同,若s1与s2相等,返回0;若s1大于s2,返回正数;若s1小于s2,则返回负数strcat(s1,s2) 将字符串... 阅读全文
posted @ 2015-08-13 08:49 vincently 阅读(1804) 评论(0) 推荐(0)
摘要:1. 一个空类的大小是1 byte。这是为了让这一类的两个对象得以在内存中配置独一无二的地址。 2. Nonstatic data member 放置的是“个别的class object”感兴趣的数据,static data members则放置的是“整个class”感兴趣的数据。 3. C... 阅读全文
posted @ 2015-07-16 22:28 vincently 阅读(314) 评论(0) 推荐(0)
摘要:成员们的初始化队伍(member Initia有四种情况必须使用member initialization list: 1. 当初始化一个reference member时; 2. 当初始化一个const member时; 3. 当调用一个base class的constructor,而它拥有... 阅读全文
posted @ 2015-07-14 23:37 vincently 阅读(174) 评论(0) 推荐(0)
摘要:程序转化语义学(Program Transform Semantics)显式的初始化操作 已知有这样的定义: X x0; 下面的三个定义每一个都明显地以x0来初始化其class object: void foo_bar(){ X x1(x0); X x2 = x0; X x... 阅读全文
posted @ 2015-07-14 22:45 vincently 阅读(186) 评论(0) 推荐(0)
摘要:Default Constructor的构造操作 对于class X,如果没有任何user-declared constructor, 那么会有一个default constructor被隐式(implicit)声明出来,一个被隐式声明出来的default constructor将是一个trivi... 阅读全文
posted @ 2015-07-14 20:36 vincently 阅读(503) 评论(0) 推荐(0)
摘要:前言中的内容: 1.什么是C++对象模型? 1.语言中直接支持面向对象程序设计的部分 2. 对于各种支持的底层实现机制 2. C++ class的完整virtual functions在编译时期就固定下来了,程序员没有办法再执行器动态增加或取代其中一个。这使得虚拟调用操作得以快速地派... 阅读全文
posted @ 2015-07-13 22:15 vincently 阅读(230) 评论(0) 推荐(0)
摘要:static的作用 1.隐藏 当我们编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,其他的源文件也能访问。如,我们有源文件source1.cpp定义了一个全局变量i和函数Func1 //source1.cpp2 int i = 0;3 4 void Func()5... 阅读全文
posted @ 2015-03-30 21:30 vincently 阅读(589) 评论(0) 推荐(0)
摘要:new和delete表达式可以用来动态创建和释放单个对象,也可以用来动态创建和释放动态数组。 定义变量时,必须指定其数据类型和名字。而动态创建对象时,只需指定其数据类型,而不必为该对象命名。new表达式返回指向新创建对象的指针,我们通过该指针访问对象:1 int i; //named, uni... 阅读全文
posted @ 2015-03-28 09:21 vincently 阅读(1827) 评论(0) 推荐(0)
摘要:构造函数是特殊的成员函数,只要创建类类型的对象,都要执行构造函数。构造函数的工作是保证每个对象的数据成员具有合适的初始值。 class Sales_Item {public: //operations on Sales_item objects //default construc... 阅读全文
posted @ 2015-03-26 16:49 vincently 阅读(620) 评论(0) 推荐(0)
摘要:C++支持另一个关键字struct,它也可以定义类类型。struct关键字是从C语言继承过来的。默认初始访问级别不同: 如果使用class关键字来定义类,那么定义在第一个访问标号前的任何成员都隐式指定为private;如果使用struct关键字,那么这些成员都是public,使用class还是... 阅读全文
posted @ 2015-01-10 09:15 vincently 阅读(518) 评论(0) 推荐(0)