随笔分类 -  C++

上一页 1 2 3 4 5 6 7 ··· 12 下一页
摘要:错误1: template<class T>void temp(std::vector<T>& container){ std::vector<T>::const_iterator p; //error: expected ‘;’ before ‘p’ for(p = container.begin 阅读全文
posted @ 2014-10-25 21:51 dzqabc 阅读(6851) 评论(0) 推荐(1)
摘要:示例如下:class MyClass{public: MyClass(int a) : _a(a) { } MyClass(const MyClass& rhs){ new(this)MyClass(rhs._a); // placement new } MyClass & operator = (... 阅读全文
posted @ 2014-10-25 21:36 dzqabc 阅读(559) 评论(0) 推荐(0)
摘要:没找到具体原因,MSDN看到下面这句,VC是从2008才有这一限制的,感觉就是从语法上对临时变量增加了限定,因为一般说来修改一个临时变量是毫无意义的,通过增加限定,强调临时变量只读语义。虽然实际上修改临时变量并不会有问题。Visual Studio 2008In previous releases ... 阅读全文
posted @ 2014-08-21 01:03 dzqabc 阅读(504) 评论(0) 推荐(0)
摘要:为了支持c++的多态性,才用了动态绑定和静态绑定。理解他们的区别有助于更好的理解多态性,以及在编程的过程中避免犯错误。需要理解四个名词:1、对象的静态类型:对象在声明时采用的类型。是在编译期确定的。2、对象的动态类型:目前所指对象的类型。是在运行期决定的。对象的动态类型可以更改,但是静态类型无法更改... 阅读全文
posted @ 2014-06-15 10:43 dzqabc 阅读(1317) 评论(0) 推荐(0)
摘要:__builtin_prefetch() 是 gcc 的一个内置函数。它通过对数据手工预取的方法,减少了读取延迟,从而提高了性能,但该函数也需要 CPU 的支持。该函数的原型为:void __builtin_prefetch (const void *addr, ...)其中参数 addr 是个内存... 阅读全文
posted @ 2014-04-27 16:52 dzqabc 阅读(22516) 评论(1) 推荐(3)
摘要:下面介绍用重载new/delete运算符的方式来实现一个简单的内存泄露检测工具,基本思想是重载全局new/delete运算符,被检测代码调用new和delete运算符时就会调用重载过的operator new和operator delete,在重载的operator new里和operator delete里记录下内存申请和释放信息,从而判断内存使用情况。下面一步步介绍它的实现!1、全局new/delete的重载 先看一下重载new/delete的规则: 重载的operator new的参数个数任意,但第一个参数必须是size_t类型的,返回值必须是void*。重载operator delet 阅读全文
posted @ 2013-09-09 21:08 dzqabc 阅读(1439) 评论(1) 推荐(0)
摘要:0.1.守则01:把C++看做一个语言的集合,而不是单一的语言 早期的C++只是叫"C with classes",但发展到今天已经成为一个多重泛型编程语言(Multi-paradigm programming language),它具有4种“子语言”:C 面向对象的C++ 模板C++ STL 0. 阅读全文
posted @ 2013-08-01 23:57 dzqabc 阅读(333) 评论(0) 推荐(0)
摘要:int f (int & I){ cout<<I<<std::endl;}void main(){ long L; f(L); // 编译不过 f((int)L); // 编译不过 f((int&)L);// 编译过}编译不会通过,这种情况下pL不会自动转换成... 阅读全文
posted @ 2013-07-29 00:08 dzqabc 阅读(984) 评论(0) 推荐(1)
摘要:对于用户自定义的类类型,实现它们和其他数据类型之间的转换有两种方法:(1)通过转换构造函数进行类型转换;(2)通过类型转换函数进行类型转换;转换构造函数: 类名(待转换类型) { 函数体; }转换构造函数可以把预定义类型转化为自定义类的对象,但是却不能把类的对象转换为基本数据类型。于是需要用到类型转换函数。类型转换函数: operator 目标类型() { return 目标类型的数据; } 阅读全文
posted @ 2013-06-28 21:57 dzqabc 阅读(343) 评论(0) 推荐(0)
摘要:1.模板函数(模板类的成员函数)只有在被使用的时候才会被实例化。在实例化之前也只会进行有限的错误检查。 这样子有两个好处: 1.换来时间和空间效率,可以省去无用函数编译时间和编译生成代码所占用存储。 2.(模板类的成员函数)可以规避掉某些场景下的编译错误。某模板类在场景1下用到且只用到成员函数f1和 阅读全文
posted @ 2013-05-21 07:40 dzqabc 阅读(590) 评论(0) 推荐(0)
摘要:转自:http://blog.sina.com.cn/s/blog_9f4f649d010163sa.html1. 调用栈系列下面是函数原型:1234#include "execinfo .h"int backtrace(void **buffer, int size);char **backtrace_symbols(void *const *buffer, int size);void backtrace_symbols_fd(void *const *buffer, int size, int fd);接下来,对上面三个函数进行介绍:(1)backtrace用来获得当 阅读全文
posted @ 2013-05-09 23:20 dzqabc 阅读(252) 评论(0) 推荐(0)
摘要:转载:http://www.wuzesheng.com/?p=840C++中内存的动态分配与管理永远是一个让C++开发者头痛的问题,本文通过对C++中内存的动态分配释放的基本原理的介绍,让读者朋友能对C++中的内存的动态分配与释放有较为深入的理解,从而更好驾驭C++程序。1. 函数(Function)(1) operator new functionvoid*::operatornew(size_t);//Globalvoid*class-name::operatornew(size_t);//Class上面是C++中operator new function的原型,一个是全局类型的,一个的类 阅读全文
posted @ 2013-05-09 23:07 dzqabc 阅读(521) 评论(0) 推荐(0)
摘要:转载:http://blog.chinaunix.net/uid-26818262-id-3219065.html红黑树键值需重载小于号即可,因为 if !a < b & !b < a then a==bSTL提供了许多好用的数据结构与算法,使我们不必为做许许多多的重复劳动。STL里实现了一个树结构-Red-Black Tree,它也是STL里唯一实现的一个树状数据结构,并且它是map, multimap,set,multiset的底层实现,如果学会了Red-Black Tree,那么对我们高效的运用STL是很有帮助的。1. 什么是红黑树红黑树是二叉查找树的一种,由于它能够保证树的高度 阅读全文
posted @ 2013-05-01 22:51 dzqabc 阅读(1200) 评论(0) 推荐(0)
摘要:有时为定位一些如头文件循环包含致编译不过问题,我们要知道头文件包含顺序。G++ -H 除了进行正常编译,还会打印每个头文件的名称。每个文件通过缩进表示它在包括堆栈中的深度。无效的预编译头文件也会打印出来;无效的预编译头文件打印...x,有效的打印...! 阅读全文
posted @ 2013-04-11 00:24 dzqabc 阅读(702) 评论(0) 推荐(0)
摘要:在源码中,宏likely和unlikely 是这么定义的(位于include/linux/compiler.h): #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0)要理解宏likely和unlikely ,很明显必须理解__builtin_expect。__builtin_expect是GCC(version>=2.9)引进的宏,其作用就是帮助编译器判断条件跳转的预期值,避免跳转造成时间浪费。拿下面的代码来说: if (likely(acat == 1)) 阅读全文
posted @ 2013-04-09 23:17 dzqabc 阅读(699) 评论(0) 推荐(0)
摘要:VA_LIST 是在C语言中解决变参问题的一组宏,所在头文件:#include <stdarg.h>他有这么几个成员1) va_list型变量:#ifdef _M_ALPHAtypedef struct {char *a0; /* pointer to first homed integer argument */int offset; /* byte offset of next parameter */} va_list;#elsetypedef char * va_list;#endif_M_ALPHA是指DEC ALPHA(Alpha AXP)架构。所以一般情况下va_li 阅读全文
posted @ 2013-02-19 23:24 dzqabc 阅读(415) 评论(0) 推荐(0)
摘要:4 Functors to encapsulate C and C++ Function Pointers 4.1 What are Functors ? Functors are functions with a state. In C++ you can realize them as a class with one or more private members to store the state and with an overloaded operator6 () to execute the function. Functors can encapsulate C and C+ 阅读全文
posted @ 2013-01-10 07:58 dzqabc 阅读(339) 评论(0) 推荐(0)
摘要:当内存分配请求不能满足时,调用你预先指定的一个出错处理函数。这个方法基于一个常规,即当operator new不能满足请求时,会在抛出异常之前调用客户指定的一个出错处理函数——一般称为new-handler函数。(operator new实际工作起来要复杂一些,详见条款8)指定出错处理函数时要用到 set_new_handler 函数,它在头文件<new>里大致是象下面这样定义的: typedef void (*new_handler)(); new_handler set_new_handler(new_handler p) throw();可以看到,new_handler 是一 阅读全文
posted @ 2012-12-03 22:42 dzqabc 阅读(429) 评论(0) 推荐(0)
摘要:Function几乎是任何语言的元素之一,从Pascal,Fortran到C++,VB,几乎任何时代的语言都支持它。在C++里,随着 C++标准库的推出,人们开始渐渐的接触到另一种定义函数的方式:Functor。所谓Functor,其实就是重载了operator () 的类,其使用方式和普通函数差不多(这正是C++处处体现的一种思想:只在定义上有区别,在使用上毫无区别)。 譬如说,如果我们要定义一个函数,将传入的整型引用加一,我们可以有两种方法定义: inline void increase_one_func(int& i) { ++i; ... 阅读全文
posted @ 2012-10-26 21:41 dzqabc 阅读(495) 评论(0) 推荐(0)
摘要:错误信息为:一个实例化的逻辑错误导致程序中止.在what()函数中不能使用NULL来构造basic_string的对象.错误 用法的演示:============================#include <string>using namespace std;void main(void){//string a(NULL);//错误用法//string b = NULL;//错误用法string a("");//正确用法string b = "";//正确用法string c;//正确用法a = "aaa";b = 阅读全文
posted @ 2012-06-29 23:10 dzqabc 阅读(3470) 评论(0) 推荐(0)

上一页 1 2 3 4 5 6 7 ··· 12 下一页