
C++
文章平均质量分 73
onejian
勇敢做自己
展开
-
C++重载箭头操作符
转载自> #include using namespace std; class A{ public: void action(){ cout << "Action in class A!" << endl; } }; class B{转载 2013-12-25 19:10:11 · 617 阅读 · 0 评论 -
STL list
list的节点结构:template struct __list_node { typedef void* void_pointer; void_pointer next; void_pointer prev; T data;};List不能像vector那样以普通的指针作为iterator,因为节点不能保证内存在空间上是连续的。List是一个双原创 2014-03-06 00:34:34 · 664 阅读 · 0 评论 -
迭代器(Iterator)概念与traits编程技法
Iterator是一种抽象的设计概念《Design Patterns》其中对于iterator模式定义如下:提供一种方法,使之能够依序讯访某个聚合物(容器)所包含的各个元素而又无需暴露该聚合物的内部表达方式。STL的中心思想在于:将数据容器(containers)和算法(algorithms)分开彼此独立设计,最后再以一贴粘合剂将其撮合。这个粘合剂就是Iterator。迭代器相应型原创 2014-03-06 00:23:35 · 756 阅读 · 0 评论 -
泛型编程基本概念
Concept与Modeling:Concept即非class也非function或者template,是抽象的,Modeling就是对应抽象的具体.1. concept想象成一组type requirement,如果type T是concept T的一个model,必须满足C的所有条件2. concept是所有type的集合,如果T是concept C的model,表示T隶属于C原创 2014-03-06 00:21:41 · 707 阅读 · 0 评论 -
构造函数语意学
Default构造函数操作:首先需要说明:带来的第一个问题,编译器什么时候合成默认构造函数(nontrivial)?答案是编译器需要的时候,而不是程序需要的时候。1)class Foo { public: Foo(); ...};class Bar { public: Foo _foo; char* _str...};void foo_bar() {Bar ba原创 2014-03-06 00:14:44 · 586 阅读 · 0 评论 -
Data语意学
Data Member的内存布局:前言知识:C++ standard要求:同一个access section中,members的排列只需符合“较晚出现的members在class object中有较高的地址”,也就是members之间可能会出现边界调整的字节填充等。另外编译器还可能会合成内部一些使用的data members比如vptr,但是编译器会讲vptr放在什么位置呢?开头最后?不同原创 2014-03-06 00:16:23 · 570 阅读 · 0 评论 -
STL vector
分析的是sgi STL中vector的版本 http://www.sgi.com/tech/stl/download.html 作为学习之用基础(SGI STL的空间分配器):typedef __malloc_alloc_template malloc_alloc;..# ifdef __USE_MALLOCtypedef malloc_alloc alloc; //令allo原创 2014-03-06 00:33:14 · 707 阅读 · 0 评论 -
new; operator new; placement new
1. placement new的含义placement new 是重载operator new 的一个标准、全局的版本,它不能够被自定义的版本代替(不像普通版本的operator new 和 operator delete能够被替换)。void *operator new( size_t, void *p ) throw() { return p; }placement new的执行转载 2013-12-24 14:04:23 · 487 阅读 · 0 评论 -
c++ const
const指针:从后往前的读法根据“左内右本”的原则左内:当const在*的左边,如const int* p; 表示指针p所指向的内容是常量右本:当const在*的右边,如int* const p; 表示指针p本身是一个常量结合起来:const int* const p; 则表示指针p所指向的内容是常量,同时指针p本身也是一个常量。int const *p//p是一个指原创 2012-09-09 14:55:23 · 512 阅读 · 0 评论 -
C++新型类型转化 和内部嵌套类
const_cast: 转化掉表达式的const性质static_cast:编译器隐式执行的转化都可通过此完成。例如将void* 指针转化为typed指针reinterpret_cast意图执行低级转型,例如将pointer to int 转化为intdynamic_cast:执行安全向下转型,用来决定某对象是否guis原创 2013-12-22 13:19:59 · 760 阅读 · 0 评论 -
Auto_ptr和shared_ptr
C++内存区划分相关的基础知识:(参考:《Exceptional C++》)Const Data: The const data area stores string literals and other data whose values are known at compile-time. No objects of class type can exist in this area。这部分数原创 2013-12-22 14:01:58 · 1041 阅读 · 0 评论 -
C++编译,前置声明
class A {public: B b;};class B {public: A a;};存在类嵌套的问题,编译无法通过。采用前置声明解决class B;class A {public: B b;};class B {public: A a;};以上代码还是错误的,因为在编译期间对于类的定义需原创 2013-12-22 13:33:35 · 731 阅读 · 0 评论 -
C/C++程序员必须熟练应用的开源项目
作为一个经验丰富的C/C++程序员, 肯定亲手写过各种功能的代码, 比如封装过数据库访问的类, 封装过网络通信的类,封装过日志操作的类, 封装过文件访问的类, 封装过UI界面库等, 也在实际的项目中应用过, 但是回过头仔细想想,其实以前自己写过的这些代码,只能是在特定的项目或者特定的环境中使用, 对于自己来说, 在不同的项目中应用, 只需要复制代码, 改改也就可以了, 因为自己写的代码自己很熟悉。转载 2013-05-10 18:55:09 · 589 阅读 · 0 评论 -
执行期语意学
对象的构造和析构讲解在以下几种情况下编译器是如何安插构造和析构函数?1.全局对象2.局部静态对象3.数组对象1)全局对象Matrix g_identity;main() {Matrix m = g_identity ;}c++保证了在main函数中第一次用到g_str之前,将g_str构造出来,在main()函数结束之前将g_str毁掉。一个glo原创 2014-03-06 00:15:41 · 616 阅读 · 0 评论