
C++
文章平均质量分 84
wuyue五月
这个作者很懒,什么都没留下…
展开
-
c++的四种类型转换
一、reinterpret_cast: 是特意用于底层的强制转型,导致实现依赖(implementation-dependent)(不可移植)的结果,这种转换不用于修改指针变量值数据存放的格式(不改变指针变量值),只需在编译期间重新解释指针的类型就可以做到。并不会改变指针的类型,只是为了编译通过。而且仅限于指针的操作。例如,将一个指针转型为一个整数。转载 2014-04-01 17:00:27 · 658 阅读 · 0 评论 -
站在巨人的肩膀上,C++开源库大全
转载地址:http://blog.youkuaiyun.com/chen19870707/article/details/40427645程序员要站在巨人的肩膀上,C++拥有丰富的开源库,这里包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。标准库C++ Standard Library:是一系列类和函数的集合,使用核心语言编写,也是转载 2016-06-30 09:23:21 · 703 阅读 · 0 评论 -
C++中的RAII机制
1.概念Resource Acquisition Is Initialization 机制是Bjarne Stroustrup首先提出的。要解决的是这样一个问题:在C++中,如果在这个程序段结束时需要完成一些资源释放工作,那么正常情况下自然是没有什么问题,但是当一个异常抛出时,释放资源的语句就不会被执行。于是Bjarne Stroustrup就想到确保能运行资源释放代码的地方就是在这个程序转载 2016-07-24 16:15:12 · 345 阅读 · 0 评论 -
STL插入排序std::upper_bound和std::lower_bound的使用,以及通用排序类
转载地址:http://blog.chinaunix.net/uid-22145625-id-3864291.html1.使用vector进行排序插入 如果我们有个vector容器,如std::vector vMyVec,里面现在已经有1,3,5,7, 四个元素,现在需要往1,3之间插入2这个元素,那怎么办呢,更或者vector里面是个自定义的类型,需要做这种插入操作,那可以转载 2016-07-08 17:03:53 · 2643 阅读 · 0 评论 -
Policies/Binary Compatibility Issues With C++
Contents1Definition2Note about ABI3The Do's and Don'ts4Techniques for Library Programmers4.1Bitflags4.2Using a d-Pointer5Trouble shooting5.1Adding new data members to c转载 2016-08-16 20:18:07 · 475 阅读 · 0 评论 -
二进制兼容问题
转载地址:http://blog.youkuaiyun.com/coolmeme/article/details/7188017二进制兼容问题,主要是针对动态链接库而言的。在Windows上就是dll,在linux上就是so。 如果主程序EXE(当然也可以是客户库)不变,升级了依赖库SO1到SO2,而不需要重新编译,那么就是说so2是兼容so1库的。二进制兼容涉及到编译问题,所以和硬件平台,软件平转载 2016-08-16 20:26:40 · 1726 阅读 · 0 评论 -
C++中 share_from_this类的作用和实现原理
转载地址:http://blog.youkuaiyun.com/acs713/article/details/29174191boost库中的share_from_this 已经在c11标准中实现。理论与boost相同,以下是按照boost的文档来解释该问题。使用boost库时,经常会看到如下的类class A:public enable_share_from_this在什么情况下要使转载 2016-08-18 10:23:49 · 10978 阅读 · 0 评论 -
shared_from_this 几个值得注意的地方
shared_from_this()是enable_shared_from_this的成员 函数,返回shared_ptr。首先需要注意的是,这个函数仅在shared_ptr的构造函数被调用之后才能使 用。原因是enable_shared_from_this::weak_ptr并不在构造函数中设置,而是在shared_ptr的 构造函数中设置。如下代码是错误的:clas转载 2016-08-18 18:39:13 · 2154 阅读 · 0 评论 -
C++的语义类型和弱引用
C++中存在两种语义:值语义(value sematics)和对象语义(object sematic),对象语义也可以叫做引用语义(reference sematics)。值语义,指的是对象的拷贝与原对象无关,就像拷贝int一样,C++的常用类型数据等都是值语义。对象语义,指的是面向对象意义下的对象,是禁止拷贝的。在设计一个类的时候该类是否可以被拷贝(即具备拷贝转载 2016-08-18 19:18:18 · 837 阅读 · 0 评论 -
带符号整数的除法与余数
转载地址:http://blog.youkuaiyun.com/solstice/article/details/5139302他的巧妙之处在于,用一个对称的 digits 数组搞定了负数转换的边界条件(二进制补码的正负整数表示范围不对称)。代码大致如下,经过改写: [c-sharp] view plain copy const char* convert(char转载 2016-08-18 20:27:08 · 1426 阅读 · 0 评论 -
C++ 11 的 unique_ptr
unique_ptr 不共享它的指针。它无法复制到其他 unique_ptr,无法通过值传递到函数,也无法用于需要副本的任何标准模板库 (STL) 算法。只能移动unique_ptr。这意味着,内存资源所有权将转移到另一 unique_ptr,并且原始 unique_ptr 不再拥有此资源。我们建议你将对象限制为由一个所有者所有,因为多个所有权会使程序逻辑变得复杂。因此,当需要智能指针用于纯转载 2016-08-08 19:23:30 · 696 阅读 · 0 评论 -
详细解析boost中bind的实现
转载地址:http://blog.youkuaiyun.com/hengyunabc/article/details/7773250写在前面的话在C++11之后,std::bind是C++标准库的一个组件了。一开始想弄个C++11的实现来研究下,发现里面用到了可变参数模板(代码变得非常神奇).http://llvm.org/svn/llvm-project/libcxx/trunk/inclu转载 2016-08-12 13:55:41 · 1985 阅读 · 1 评论 -
C++ function、bind以及lamda表达式
本文是C++0x系列的第四篇,主要是内容是C++0x中新增的lambda表达式, function对象和bind机制。之所以把这三块放在一起讲,是因为这三块之间有着非常密切的关系,通过对比学习,加深对这部分内容的理解。在开始之间,首先要讲一个概念,closure(闭包),这个概念是理解lambda的基础。下面我们来看看wikipedia上对于计算机领域的closure的定义:转载 2016-08-13 10:02:16 · 370 阅读 · 0 评论 -
C++ STL算法系列之十六:iter_swap
上文中阐述了元素交换算法swap以及容器中swap成员函数的使用,尤其是通过vector成员函数的交换技巧实现容器内存的收缩,今天,我们要看到的是另一个变易算法,迭代器的交换算法iter_swap,顾名思义,该算法是通过迭代器来完成元素的交换。首先我们来看看函数的原型:函数原型:[cpp] view plain copy templateclass Forwar转载 2016-08-13 12:06:30 · 2208 阅读 · 0 评论 -
C++中的函数对象(Function Object)
转载地址:http://blog.youkuaiyun.com/bonchoix/article/details/8050627 http://blog.youkuaiyun.com/bonchoix/article/details/8054639 一个函数对象,即一个重载了括号操作符“()”的对象。当用该对象调用此操作符时,其表现形式如同普通函数调用一般,因此取名叫函数对象。举个转载 2016-11-09 11:00:20 · 967 阅读 · 0 评论 -
成员变量作为成员函数的默认参数
如何在类成员函数中默认引用类成员?class CAbc;class CAbc{private:int m_abc;public:void fun0(int &p=NULL)//编译错误{ printf("%d",p);}void fun1(const int &p=NULL)//编译通过{ printf("%d",p);}void fun2(int &p=this->m_abc)//编转载 2016-06-03 17:02:38 · 4940 阅读 · 0 评论 -
关于C++中如何判断文件,目录存在的若干方法
在我们平时的编程时,经常需要判断文件或者目录是否存在,相对来说判断文件的存在性比较简单,目录则比较复杂。下面就详细的介绍几种方法。 首先关于判断文件的存在性:一、ifstream在C++中,可以利用ifstream文件输入流,当我们直接使用ifstream来创建文件输入流的时候,如果文件不存在则流创建失败。ifstream fin("hello.txt");if (转载 2016-05-30 14:56:23 · 655 阅读 · 0 评论 -
C++之RAII惯用法
转载地址:http://blog.youkuaiyun.com/hunter8777/article/details/6327704C++中的RAII全称是“Resource acquisition is initialization”,直译为“资源获取就是初始化”。但是这翻译并没有显示出这个惯用法的真正内涵。RAII的好处在于它提供了一种资源自动管理的方式,当产生异常、回滚等现象时,RAII可以正确转载 2016-05-14 21:57:34 · 586 阅读 · 0 评论 -
C++ 下 typeof auto
现在我们有这样一坨代码:[cpp] view plaincopystd::vectorint> arr; // ... for(std::vectorint>::iterator iter = arr.begin(); iter != arr.end(); ++iter) { // ... }转载 2014-04-01 21:42:12 · 1270 阅读 · 0 评论 -
C++箴言<34>:接口继承和实现继承的区别
(public) inheritance 这个表面上简单易懂的观念,一旦被近距离审视,就会被证明是由两个相互独立的部分组成的:inheritance of function interfaces和 inheritance of function implementations。这两种 inheritance 之间的差异正好符合本书 Introduction 中论述的 function de原创 2014-04-01 20:35:37 · 753 阅读 · 0 评论 -
c++类的内存布局
本文基本上是对于Stanley B.Lippman的Inside The C++ Object Model一书第一章第三章的概括,描述了c++类的内存布局情况.c++的类的内存布局有如下规则:1. Nonstatic data member 存放在Class Object中;2. Static data member, static/nonstatic member functio转载 2014-04-03 15:53:48 · 625 阅读 · 0 评论 -
typedef typeof define区别认识
(1) typedef 作用是为一种数据类型定义一个新的名字,可以是内部数据类型(char,int等),也可以是自定义的数据类型(struct,void (*myfunction)(),char *等等).(也许比较常见的typedef用法就是定义一个函数指针,上面的myfunction, 还有结构体了)如:typedef 返回类型(*新类型)(参数表) typedef i转载 2014-04-04 17:03:23 · 5240 阅读 · 0 评论 -
回调函数
1、什么事回调函数回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。原创 2014-04-08 21:29:56 · 767 阅读 · 1 评论 -
c++继承中的内存布局
今天在网上看到了一篇写得非常好的文章,是有关c++类继承内存布局的。看了之后获益良多,现在转在我自己的博客里面,作为以后复习之用。——谈VC++对象模型(美)简.格雷程化 译译者前言一个C++程序员,想要进一步提升技术水平的话,应该多了解一些语言的语意细节。对于使用VC++的程序员来说,还应该了解一些VC++对于C++的诠释。 Inside the C++ O转载 2014-04-03 16:54:56 · 547 阅读 · 0 评论 -
C++ 内存分配方式 堆与栈的区别
在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。原创 2014-04-08 22:39:18 · 725 阅读 · 0 评论 -
分享实用工具源码--实现Windows IDE中查看Linux下编译信息
作者:fbysss msn:jameslastchina@hotmail.comblog:blog.youkuaiyun.com/fbysss 声明:本文由fbysss原创,转载请注明出处关键字: 实用工具源码 Windows下查看Linux编译信息一、背景:本人写C程序不多,更不用说Linux下了。偶然一个机会,接了个这样的活,vi我用的还马马虎虎,但程序超过一千行,看起来就有些眼花了转载 2014-10-30 22:47:10 · 1267 阅读 · 0 评论 -
谈自动化测试框架思想与构建
谈自动化测试框架思想与构建2011-06-03 17:06 散步的SUN 51Testing软件测试博客 字号:T |T自动化测试一般是指软件测试的自动化,软件测试就是在预设条件下运行系统或应用程序,评估运行结果,预先条件应包括正常条件和异常条件。本文介绍的是自动化测试框架思想与构建,一起来看。AD:WOT2015 互联网运维与开发者大会 热销抢票序转载 2015-01-11 17:45:48 · 725 阅读 · 0 评论 -
google 的开源项目
google 的开源项目 值 得我们一用的,这些项目很有意义,甚至可以直接用在我们自己的工作上!学习编程的的一个比较好的方式就是阅读优秀项目的源代码,从而能够了解作者的方法、 思路、技巧,另外阅读源代码对于一些朋友是枯燥乏味的,这是就可以看看项目的readme,找到项目的闪光点,我们不做开拓者那我们就做实践者和使用者, 呵呵,下面是这些项目的列表,在这里存档,已备今后查阅之用转载 2014-12-07 23:12:14 · 612 阅读 · 0 评论 -
C++句柄类详解
昨天由于时间的关系剩下一个小尾巴,今天忙里偷闲来把这个洞洞填上昨天学习了“面向对象编程”的部分,详细讨论了复制控制与类作用域需要注意的问题。这里有一个新的问题,如何实现一个类似“购物车”的数据结构呢?用过淘宝的同学们一定都晓得“购物车”应用,可以记录不同的商品,并且相同的商品可以显示次数,最后计算出总额。如果用C++来实现的话,当然是首选容器对象了。由于是统计可以重复的对象,所以可以使用multi转载 2015-12-11 09:38:33 · 10840 阅读 · 0 评论 -
C++中的内存分配
C++提供下面两种方法分配和释放未构造的原始内存(1)allocator 类,它提供可感知类型的内存分配(2)标准库中的 operator new 和 operator delete,它们分配和释放需要大小的原始未类型化的内存 C++ 还提供不同的方法在原始内存中构造和撤销对象(1)std::allocator::construct 在未构造内存中初始化对象,std::al转载 2016-01-16 21:32:35 · 416 阅读 · 0 评论 -
【C/C++】结构体和联合体的区别
联合体用途:使几个不同类型的变量共占一段内存(相互覆盖)结构体是一种构造数据类型用途:把不同类型的数据组合成一个整体-------自定义数据类型总结:声明一个联合体:[cpp] view plaincopyunion abc{ int i; char m;转载 2016-01-17 16:26:53 · 452 阅读 · 0 评论 -
c++ 设计模式之单件模式
转载地址:http://blog.youkuaiyun.com/lbqbraveheart/article/details/7084509单件模式应该是所有设计模式中最简单的一个了,但是如果使用不当会出现很多问题,下面我们就分析一下单件模式作用:保证一个class只有一个实体(instance),并为它提供一个全局唯一的访问点 适用性:1、对于一个类(对象),如果它比较大(占用的系统资源非转载 2016-04-12 20:31:58 · 853 阅读 · 0 评论 -
C++ 内存分配(new,operator new)详解
转载地址:http://blog.youkuaiyun.com/wudaijun/article/details/9273339这篇文章写得不错,看得出参考了很多比较好的博客,自己理解也很好,学习了。本文主要讲述C++ new关键字和operator new, placement new之间的种种关联,new的底层实现,以及operator new的重载和一些在内存池,STL中的应用。转载 2016-11-18 09:56:01 · 530 阅读 · 0 评论