![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
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 · 572 阅读 · 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 · 623 阅读 · 0 评论 -
迭代器(Iterator)概念与traits编程技法
Iterator是一种抽象的设计概念《Design Patterns》其中对于iterator模式定义如下:提供一种方法,使之能够依序讯访某个聚合物(容器)所包含的各个元素而又无需暴露该聚合物的内部表达方式。 STL的中心思想在于:将数据容器(containers)和算法(algorithms)分开彼此独立设计,最后再以一贴粘合剂将其撮合。这个粘合剂就是Iterator。 迭代器相应型原创 2014-03-06 00:23:35 · 717 阅读 · 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 · 669 阅读 · 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 · 549 阅读 · 0 评论 -
Data语意学
Data Member的内存布局: 前言知识: C++ standard要求:同一个access section中,members的排列只需符合“较晚出现的members在class object中有较高的地址”,也就是members之间可能会出现边界调整的字节填充等。另外编译器还可能会合成内部一些使用的data members比如vptr,但是编译器会讲vptr放在什么位置呢?开头最后?不同原创 2014-03-06 00:16:23 · 538 阅读 · 0 评论 -
STL vector
分析的是sgi STL中vector的版本 http://www.sgi.com/tech/stl/download.html 作为学习之用 基础(SGI STL的空间分配器): typedef __malloc_alloc_template malloc_alloc; .. # ifdef __USE_MALLOC typedef malloc_alloc alloc; //令allo原创 2014-03-06 00:33:14 · 660 阅读 · 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 · 458 阅读 · 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 · 437 阅读 · 0 评论 -
C++新型类型转化 和内部嵌套类
const_cast: 转化掉表达式的const性质 static_cast:编译器隐式执行的转化都可通过此完成。例如将void* 指针转化为typed指针 reinterpret_cast意图执行低级转型,例如将pointer to int 转化为int dynamic_cast:执行安全向下转型,用来决定某对象是否guis原创 2013-12-22 13:19:59 · 718 阅读 · 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 · 1006 阅读 · 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 · 692 阅读 · 0 评论 -
C/C++程序员必须熟练应用的开源项目
作为一个经验丰富的C/C++程序员, 肯定亲手写过各种功能的代码, 比如封装过数据库访问的类, 封装过网络通信的类,封装过日志操作的类, 封装过文件访问的类, 封装过UI界面库等, 也在实际的项目中应用过, 但是回过头仔细想想,其实以前自己写过的这些代码,只能是在特定的项目或者特定的环境中使用, 对于自己来说, 在不同的项目中应用, 只需要复制代码, 改改也就可以了, 因为自己写的代码自己很熟悉。转载 2013-05-10 18:55:09 · 558 阅读 · 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 · 574 阅读 · 0 评论