
c/c++
origin_lee
这个作者很懒,什么都没留下…
展开
-
C++11 lambda 表达式解析
C++11 新增了很多特性,lambda 表达式是其中之一,如果你想了解的 C++11 完整特性,建议去这里,这里,这里,还有这里看看。本文作为 5 月的最后一篇博客,将介绍 C++11 的 lambda 表达式。很多语言都提供了 lambda 表达式,如 Python,Java 8。lambda 表达式可以方便地构造匿名函数,如果你的代码里面存在大量的小函数,而这些函数一般只被调用一转载 2014-10-30 10:34:41 · 292 阅读 · 0 评论 -
boost bind 实现方法
一直比较好奇 boost::bind 里面占位符和参数的顺序是怎么实现的,也一直看不太懂这方面源代码,昨晚好好看了下,终于有点弄懂了。小记一笔,与大家分享。先看一个简单的用例:#include int foo(bool a, int b, double c){ return 0;} int main(){转载 2014-12-17 21:44:37 · 486 阅读 · 0 评论 -
boost源码剖析之:泛型函数指针类boost::function
boost源码剖析之:泛型函数指针类boost::function(rev#3) 刘未鹏C++的罗浮宫(http://blog.youkuaiyun.com/pongba) Note: 并非新作,03年曾放在blog上,现在这个版本应该是修改后的最终版本。 前奏如你所知,boost库是个特性完备,且具备工业强度的库,众多C++权威的参与使其达到了登峰造极的程度。尤其泛型的强大威转载 2014-12-17 18:34:31 · 481 阅读 · 0 评论 -
(搬运工)推荐!国外程序员整理的 C++ 资源大全
标准库C++标准库,包括了STL容器,算法和函数等。C++ Standard Library:是一系列类和函数的集合,使用核心语言编写,也是C++ISO自身标准的一部分。Standard Template Library:标准模板库C POSIX library : POSIX系统的C标准库规范ISO C++ Standards Committee :C++标准委员会转载 2014-12-02 13:44:56 · 623 阅读 · 0 评论 -
数组/枚举 初始化最后一个逗号的问题
http://bbs.youkuaiyun.com/topics/330052999以下是从MSDN中copy出来的一段,其实就是形式语法的规定,加不加都是可以的。注:其实原来我是不加的,后来我有看Linux下的源码,然后也发现了这个问题,后来有Google到gcc下的语法,觉得其实加上更好,现在就都加了。Initializing Aggregate TypesAn “aggreg转载 2015-01-27 10:35:38 · 4673 阅读 · 0 评论 -
关于ASSERT
[objc] view plaincopyprint?-(EvalPerform*)preInitializeWith:(EvalCreationparamters*)params andPerformType:(NSString*)performType andMainPerform:(EvalPerform*)evalPerform { TE转载 2014-12-19 10:57:03 · 485 阅读 · 0 评论 -
ctime库函数的使用
ctime库函数的使用2011-01-25 15:59本文探讨了C/C++中对日期和时间操作所用到的常用功能,并以大量的实例向你展示了#include 头文件中声明的各种函数和数据结构的详细使用方法.基本概念的理解:Coordinated Universal Time(UTC):世界标准时间,也就是大家所熟知的格林威治标准时间(Greenwich Mean Time转载 2014-12-21 12:30:35 · 896 阅读 · 0 评论 -
typeof关键字
typeof关键字是C语言中的一个新扩展。只要可以接受typedef名称,Sun Studio C 编译器就可以接受带有typeof的结构,包括以下语法类别:声明函数声明符中的参数类型链表和返回类型类型定义类型操作符ssizeof操作符复合文字typeof实参编译器接受带双下划线的关键字:__typeof和__typeof__。本文中的例子并没有遵循使用双下划线的惯例。从语句构成上看,转载 2014-12-20 12:05:03 · 404 阅读 · 0 评论 -
numeric_limits
一般来说,数值类型的极值是一个与平台相关的特性。c++标准程序库通过template numeric_limits提供这些极值,取代传统C语言所采用的预处理常数。你仍然可以使用后者,其中整数常数定义于和,浮点常数定义于和,新的极值概念有两个优点,一是提供了更好的类型安全性,二是程序员可借此写出一些template以核定这些极值。下面是numeric_limits定义下面是参转载 2014-12-20 20:30:00 · 571 阅读 · 0 评论 -
Linux下各种时间
目录[-]rdtscgettimeofdaytimegmtime_rlocaltime_rasctime_rctime_rmktimestrftime和strptimelocaltime_r和gmtime_r性能对比rdtsc这是一个汇编指令,可以获取CPU的时钟周期,即滴答tick次数,现在随便一个CPU的频率就是几GHz了转载 2014-12-21 10:52:08 · 685 阅读 · 0 评论 -
shared_ptr线程安全性分析
shared_ptr线程安全性分析正如《STL源码剖析》所讲,“源码之前,了无秘密”。本文基于shared_ptr的源代码,提取了shared_ptr的类图和对象图,然后分析了shared_ptr如何保证文档所宣称的线程安全性。本文的分析基于boost 1.52版本,编译器是VC 2010。shared_ptr的线程安全性boost官方文档对shared_ptr线程安全性的转载 2014-12-17 10:48:16 · 420 阅读 · 0 评论 -
boost::enable_shared_from_this的部分实现研究
shared_ptr是boost库实现的几个智能指针中最重要的,其使用引用计数机制来管理资源。如果一个类由shared_ptr管理,而在这个类的某个方法又需要传出一个指向自身的指针,那么这个指针也必须被shared_ptr所管理。 boost库的实现方法为让被管理类继承boost::enable_shared_from_this类,此后通过shared_from_this函数获得指向自身的转载 2014-12-15 22:39:11 · 404 阅读 · 0 评论 -
C++ 下 Function 对象的实现
点击打开链接转载 2014-10-30 09:36:47 · 712 阅读 · 0 评论 -
float精度分析
最近一段时间看到版上关于 C++ 里浮点变量精度的讨论比较多,那么我就给对这个问题有疑惑的人详细的讲解一下 intel 的处理器上是如何处理浮点数的。为了能更方便的讲解,我在这里只以 float 型为例,从存储结构和算法上来讲, double 和 float 是一样的,不一样的地方仅仅是 float 是 32 位的, double 是 64 位的,所以 double 能存储更高的精度。还要说的一点转载 2014-10-15 09:32:50 · 506 阅读 · 0 评论 -
自己实现popen函数
闲来无事,自己实现了popen函数mypopen,后来查看了popen函数的源码发现自己实现的与其相差无几,本函数与linux中的实现最大的不同是不需要用专门的pclose()函数来关闭文件指针,用普通的fclose()即可,linux实现的代码也会给出在下文,可以对比一下其中差异。 主要通过pipe管道实现,具体思路如下: 1、使用pipe()建立管道转载 2014-10-17 16:28:25 · 1073 阅读 · 0 评论 -
c++类模板与函数模板的偏特化
(1) 类模板的偏特化例如c++标准库中的类vector的定义template class vector { // … // };template class vector { //…//};这个偏特化的例子中,一个参数被绑定到bool类型,而另一个参数仍未绑定需要由用户指定。(2) 函数模板的偏特化 严格的来说,函数模板并不支持偏特化,但由于可以对函数进行转载 2014-10-19 14:17:11 · 1436 阅读 · 0 评论 -
如何学好C++,用好类库很重要
如果你有一定的C基础可能学起来比较容易些,但是学习C++的过程中又要尽量避免去使用一些C中的思想;平时还要多看一些高手写的代码,遇到问题多多思考,怎样才能把问题抽象化,以使自己头脑中有类的概念;最后别忘了经常上机自己调调程序,这是谁也代替不了的.C++类库介绍再次体现了C++保持核心语言的效率同时大力发展应用库的发展趋势!!在C++中,库的地位是非常高的。C++之父 Bjarne St转载 2014-11-28 09:07:06 · 1397 阅读 · 0 评论 -
stderr和stdout详细解说
今天又查了一下fprintf,其中对第一个参数stderr特别感兴趣。int fprintf(FILE *stream,char *format,[argument]);在此之前先区分一下:printf,sprintf,fprintf。1,printf就是标准输出,在屏幕上打印出一段字符串来。2,sprintf就是把格式化的数据写入到某个字符串中。返回值字符串的长度转载 2014-11-28 15:27:34 · 14914 阅读 · 4 评论 -
__cdecl __fastcall, __stdcall,__thiscall
__cdecl __fastcall, __stdcall,__thiscall它们都是调用约定(Calling convention),它决定以下内容:1)函数参数的压栈顺序2)由调用者还是被调用者把参数弹出栈3)产生函数修饰名的方法首先,为什么要有这么多种调用约定?函数调用时需要用到栈。当函数调用完成后,栈需要清除,这里就是问题的关键,如何清除?如果我们的函数使用了转载 2014-10-21 20:23:19 · 436 阅读 · 0 评论 -
C++ dlopen mini HOWTO 中译版
C++ dlopen mini HOWTO 中译版C++ dlopen mini HOWTO作者:Aaron Isotton 2006-03-16译者:Lolita@linuxsir.org 2006-08-05----------------------------------------------------------------------摘要如何使用dlope转载 2014-11-27 18:01:26 · 382 阅读 · 0 评论 -
boost::shared_ptr的使用方法
1. boost::shared_ptr的用法 下面用一个简单的例子说明shared_ptr的用法: #include #include class A {public: void print() { printf("class A print!\n"); }};int main(int argc, char **argv) {转载 2014-12-15 22:40:00 · 1160 阅读 · 0 评论 -
printf完整格式
一、完整格式% - 0 m.n l或h 格式字符①%:表示格式说明的起始符号,不可缺少。②-:有-表示左对齐输出,如省略表示右对齐输出。③0:有0表示指定空位填0,如省略表示指定空位不填。④m.n:m指域宽,若数据的位数小于m,则左端补空格,若大于m,则按实际位数输出。 n指精度,用于说明输出的实型数的小数位数。未指定n时,隐含的精度为n=转载 2014-12-21 12:04:50 · 603 阅读 · 0 评论 -
还是说Memory Model,gcc的__sync_synchronize要慎用。
当我们在做多线程编程的时候,会涉及到一个称为memory order的问题。例如int x(0),y(0);x=4;y=3;请问,实际执行的时候,这两条赋值语句谁先执行,谁后执行? 会不会有某个时间点,在某个CPU看来,y比x大?答案很复杂。本文的目的是从非常实践的角度来考虑这个问题。首先,它分为两个层面。在编译器看来,x和y是两个没有关联的变量,那转载 2015-02-01 13:20:41 · 5053 阅读 · 0 评论 -
__FILE__,__LINE__
前言:我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除,而一旦需要再次调试的时候,这些语句又不得不一条条的加上,这给我们带来了很大的不便,浪费了我们很多的时间,也造成了调试的效率低下。所以,很多人会选择使用宏定义的方式来输出调试语句。比如,定义一个宏开关:转载 2014-12-23 14:06:24 · 663 阅读 · 0 评论 -
boost::weak_ptr和enable_shared_from_this
boost::weak_ptr和enable_shared_from_this shared_ptr在我的实践中使用很广,在接口层面上,我基本都会默认的使用shared_ptr.而weak_ptr则很少使用;即便使用,也是间接的使用,例如使得class A继承自boost::enable_shared_from_this,这样A便具有了一个weak_ptr的成员对象,我便可以通过接口sha转载 2014-12-15 21:18:43 · 609 阅读 · 0 评论 -
Boost 库 Enable_shared_from_this 实现原理分析
使用情景:当类对象被 shared_ptr 管理时,需要在类自己定义的函数里把当前类对象作为参数传给其他函数时,这时需要传递一个 shared_ptr ,否则就不能保持 shared_ptr 管理这个类对象的语义(因为有一个 raw pointer 指向这个类对象,而 shared_ptr 对类对象的这个引用没有计数,很有可能 shared_ptr 已经把类对象资源释放了,而那个调用函数还在使转载 2014-12-15 22:39:41 · 349 阅读 · 0 评论 -
assert用法总结
assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include void assert( int expression );assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。请看下面的程序清单badptr.c:#i转载 2014-12-16 10:34:57 · 413 阅读 · 0 评论 -
c++指针比较的含义
在c++中,一个对象可以有多个有效地地址,因此,指针比较并不是关于地址问题,而是关于类的判别 (object identity)。 class Shape {.......}; class Subject {.........}; class ObservedBlob :public shape , public Subject {.........};转载 2015-01-22 19:10:36 · 537 阅读 · 0 评论 -
C,C++宏中#与##的讲解
文中__FILE__与示例1的可以参见《使用ANSI C and Microsoft C++中常用的预定义宏》宏中的#的功能是将其后面的宏参数进行字符串化操作(Stringizing operator),简单说就是在它引用的宏变量的左右各加上一个双引号。如定义好#define STRING(x) #x之后,下面二条语句就等价。 char *pChar = "he转载 2015-03-08 16:51:31 · 358 阅读 · 0 评论 -
__attribute__((packed))详解
1. __attribute__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法。这个功能是跟操作系统没关系,跟编译器有关,gcc编译器不是紧凑模式的,我在windows下,用vc的编译器也不是紧凑的,用tc的编译器就是紧凑的。例如:在TC下:struct my{ char ch; int a;} sizeof(in转载 2015-03-29 11:01:50 · 611 阅读 · 0 评论 -
C/C++变长参数宏(Variadic Macros)
A macro can be declared to accept a variable number of arguments much as a function can. The syntax for defining the macro is similar to that of a function. Here is an example: #define eprintf(.转载 2015-04-16 10:51:30 · 2973 阅读 · 0 评论 -
setjmp/longjmp非局部跳转函数分析
之前就一直好奇setjmp()/longjmp()函数是怎么实现非局部跳转的,心中猜测应该是通过保存调用setjmp()函数处的栈上下文(stack context),之后通过函数longjmp()来恢复这个栈上下文来实现的,可是心中依然有疑惑,到底需要保存哪些东西呢,还有是怎么改变setjmp函数的返回值的呢。本文就通过实际程序调试以及glibc源码来一探究竟吧(本文针对i386平台)!转载 2015-04-15 12:13:02 · 2133 阅读 · 0 评论 -
C 语言中的达夫设备 Duff’s Device
在495个必须知道的C语言问题这本书中,提到了一个达夫设备另类的算法设计技巧。如下:[cpp] view plaincopyregister n = (count + 7) / 8; /* count > 0 assumed */ switch (count % 8) { case 0: do { *to = *from++转载 2015-06-25 11:08:04 · 662 阅读 · 0 评论 -
理解互斥量和信号量
互斥量(Mutex) 互斥量表现互斥现象的数据结构,也被当作二元信号灯。一个互斥基本上是一个多任务敏感的二元信号,它能用作同步多任务的行为,它常用作保护从中断来的临界段代码并且在共享同步使用的资源。 Mutex本质上说就是一把锁,提供对资源的独占访问,所以Mutex主要的作用是用于互斥。Mutex对象的值,只有0和1两个值。这两个值也分别代表了Mutex的两转载 2014-12-13 21:27:41 · 1021 阅读 · 0 评论 -
errno错误码及含义(中文)
/usr/include/asm/errno.h0 为 success #defineEPERM 1 /* Operation not permitted */操作不允许 #define ENOENT 2 /* Nosuch file or directory */文件/路径不存在 #define ESRCH 3 /* Nosuch process */进程不存在转载 2014-12-30 18:50:13 · 6481 阅读 · 0 评论 -
c语言重复定义 multiple definition of `Recusion'
c语言重复定义。。。。我在头文件(.h)中定义声明了一个变量int Recusion = 0; /*0,1*/然后在两个.cpp文件中使用a.cpp--------------------------Recusion = 1;b.cpp-------------------------- if(Recusi转载 2014-12-24 12:36:42 · 4376 阅读 · 1 评论 -
printf输出格式
格式代码AABCABCDEFGH%SAABCABCDEFGH%5S####A##ABCABCDEFGH%.5SAABCABCDE%5.5S####A##转载 2014-11-30 14:12:46 · 529 阅读 · 0 评论 -
Google Protocol Buffer 的使用和原理
简介什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍:Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。Pro转载 2015-01-13 19:51:43 · 471 阅读 · 0 评论 -
C可变参数实现原理
一、是什么我们学习C语言时最经常使用printf()函数,但我们很少了解其原型。其实printf()的参数就是可变参数,想想看,我们可以利用它打印出各种类型的数据。下面我们来看看它的原型:int printf( const char* format, ...);它的第一个参数是format,属于固定参数,后面跟的参数的个数和类型都是可变的(用三个点“…”做参数占位符),实际调用时可以有转载 2014-12-27 17:32:27 · 435 阅读 · 0 评论 -
C标准库源码解剖(9):控制函数assert.h, setjmp.h和signal.h
控制函数用于对C语言程序的标准控制流(如if/else、switch、for等)提供扩展,在头文件assert.h、setjmp.h和signal.h中提供,分别提供表达式断言功能、非本地跳转功能、信号处理功能。 1、assert.h: 提供用于断言的assert宏。程序中若没有定义NDEBUG,则asset(exp)对表达式exp进行断言,若断言为假(即为0),则会调用__assert转载 2015-02-04 10:05:43 · 1659 阅读 · 0 评论