C/C++
donnyxia1128
学无止境;
展开
-
移动语义(move semantic)和完美转发(perfect forward)
移动语义(move semantic)和完美转发(perfect forward)03 Jun 2014|C++新标准重新定义了lvalue和rvalue,并允许函数依照这两种不同的类型进行重载。通过对于右值(rvalue)的重新定义,语言实现了移动语义(move semantic)和完美转发(perfect forwarding),通过这种方法,C++实现了在保留原有的语法并不改动已存在的代码的基础上提升代码性能的目的。作为一个C++0x标准的初学者,理解这些概念其实还有有一定的困难的,...转载 2020-12-05 10:10:18 · 6061 阅读 · 6 评论 -
防御式编程(一)
防御式编程小结防御式编程小结 下面列出了防御式编程的一些其它要点.它们大多是编程里的常识,不过无论如何还是值得提一下的.你可能会想要建一张”to do”列表,然后在编程过程中逐项进行检查。 l 在函数的开始,检查参数的正确性。确认参数值都落在可接受的范围里。记住编程界里的一句古语:“垃圾进,垃圾出。”l 在经历一系列相关的表达式之后,检查被操作数作变量的正确性。一系转载 2012-03-20 10:11:13 · 2975 阅读 · 0 评论 -
__forceinline 关键字
C++提供了内联函数,目的是为了提高函数的执行效率。内联函数在函数声明前面加上关键字inline 就可以了 如:inline int FunctionOne(int x); 在VC++中可使用另一关键字_forceinline 代替inline 关键字.这个关键字将命令编译器跳过一般的ROI 分析(Return On Investment --一种编程缩略语),将所对应的代码强转载 2012-03-31 09:43:21 · 1119 阅读 · 0 评论 -
后置++在不同编译器中的行为
int x = 0;x = x++; 请问上述两行代码执行之后,x的值是什么?有的同事说1,有的同事说0,究竟是什么呢,试试就知道。试了三个编辑器,Inter,gcc和vc自带的cl。Inter和gcc得出的结果都是0,vc得出的结果是1。究竟哪个对呢?让我们再看看那两行代码,第一行不用多说,把一个变量赋值为0,第二行是由两部分组成的,一部分是一个赋值语句,也转载 2011-12-15 10:10:38 · 3794 阅读 · 0 评论 -
STL iterators
STL 主要是由 containers(容器),iterators(迭代器)和 algorithms(算法)的 templates(模板)构成的. 对应于它们所支持的操作,共有五种 iterators(迭代器)。 input output \ / forw转载 2011-12-09 12:29:47 · 904 阅读 · 0 评论 -
浮点数精度的一点问题
示例代码:double j = 0.65f;int i = 100 * j;结果i等于64,与我们通常预计的结果不一致;原因是0.65f后面的f符号表示了0.65是一个单精度浮点数。调试发现实际值等于0.6499999,乘以100后转整数变成64. 测试环境:vs2010原创 2011-11-08 19:29:17 · 626 阅读 · 0 评论 -
C++中数值的后缀
在C++中,数字表达提供了一系列的后缀进行表示,如下: u或U 表示数字是无符号整型数,如:123u,但并不说明是长整型还是短整型 l或L 表示数字是长整型数,如:123l;而123ul就是无符号长整型数;而34.4l就是长双精度浮点数,等效于双精度浮点数 i64或I64 表示数字是长长整型数,其是为64位操作系统定义的,长度比长整型数长。如:43i64转载 2011-11-08 19:30:18 · 4139 阅读 · 0 评论 -
ping 命令的原理,揭开单向“Ping”通的奥秘
当网络出现问题时,我们最常用的测试工具就是“Ping”命令了。但有时候我们会碰到单方向Ping通的现象,例如通过HUB或一根交叉线连接的在同一个局域网内的电脑A、B,在检查它们之间的网络连通性时,发现从主机A Ping 主机B正常而从主机B Ping 主机A时,出现“超时无应答”错误。为什么呢? 要知道这其中的奥秘,我们有必要来看看Ping命令的工作过程到底是怎 假定主机A的IP地址是转载 2011-11-04 20:36:58 · 1140 阅读 · 0 评论 -
C++ RAII
C++ RAIIC++ RAIIRAII是resource acquisition is initialization的缩写,意为“资源获取即初始化”。它是C++之父Bjarne Stroustrup提出的设计理念,其核心是把资源和对象的生命周期绑定,对象创建获取资源,对象销毁释放资源。在RAII的指导下,C++把底层的资源管理问题提升到了对象生命周期管理的更高层次。转载 2011-11-04 20:27:40 · 648 阅读 · 0 评论 -
[转]Visual Assist X设置
http://blog.sina.com.cn/s/blog_4ba5b45e0100iw6x.html转载 2012-03-22 14:52:55 · 604 阅读 · 0 评论 -
关于 WIN32_LEAN_AND_MEAN
关于 WIN32_LEAN_AND_MEAN 今天在看引擎代码时,遇到这么一句: #define WIN32_LEAN_AND_MEAN 一时还看不明白,于是本着求根问底的精神,去查了查,大概的意思是: 不加载MFC所需的模块。在编译链接时,以及在最后生成的一些供调试用的模块时,速度更快,容量更小。原创 2012-03-23 14:29:20 · 835 阅读 · 0 评论 -
Facebook开源C++组件库Folly
[简讯]近日,Facebook开源了自己内部使用的底层C++函数,总称Folly。Folly是Facebook的一个开源C++11组件库,提供了类似Boost库和std库的功能,包括散列、字符串、向量、内存分配、位处理等,满足大规模高性能的需求。目前,Folly在64位 Fedora 17,Ubuntu 12.04和Debian wheezy上通过gcc 4.6测试,也可能不用任何修改就可转载 2012-06-08 21:46:20 · 1212 阅读 · 0 评论 -
通过malloc分配序号查找内存泄漏
The file name and line number in the memory leak report tell you where leaked memory is allocated, but knowing where the memory is allocated is not always sufficient to identify the problem. Often an转载 2016-07-08 14:59:07 · 3901 阅读 · 0 评论 -
详细介绍JAVA和C++区别
详细介绍JAVA和C++区别 JAVA和C++都是面向对象语言。也就是说,它们都能够实现面向对象思想(封装,继乘,多态)。而由于c++为了照顾大量的C语言使用者,而兼容了C,使得自身仅仅成为了带类的C语言,多多少少影响了其面向对象的彻底性!JAVA则是完全的面向对象语言,它句法更清晰,规模更小,更易学。它是在对多种程序设计语言进行了深入细致研究的转载 2014-05-10 17:00:43 · 669 阅读 · 0 评论 -
线程局部存储实现
11.3.3 线程局部存储实现(1)2009-04-22 15:29 俞甲子/石凡/潘爱民 电子工业出版社 字号:T |T《程序员的自我修养:链接、装载与库》第11章运行库。本章主要介绍运行库的概念、C/C++运行库、Glibc和MSVC CRT、运行库如何实现C++全局构造和析构及以fread()库函数为例对运行库进行剖析。本节为大家介绍线程局部存储实现。转载 2014-03-30 23:49:08 · 758 阅读 · 0 评论 -
使用Thrift RPC编写程序
使用Thrift RPC编写程序Category: 搜索引擎 View: 12,602 阅 Author: Dong作者:Dong |可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址:http://dongxicheng.org/search-engine/thrift-rpc/1. 概述本文以C++语言为例介绍了thrift RPC的使用转载 2012-11-21 20:26:12 · 841 阅读 · 0 评论 -
Boost学习笔记 BOOST_STATIC_ASSERT
Boost学习笔记 BOOST_STATIC_ASSERT Boost中提供了一个编译时断言宏BOOST_STATIC_ASSERT,这个宏很简单,但里面也有一些值得学习的地方。首先来看看真正做事的代码template bool x>struct STATIC_ASSERTION_FAILURE;template <>struct STATIC_ASSERT转载 2012-10-02 18:19:58 · 4267 阅读 · 0 评论 -
C++的秘密之重载,覆盖,和隐藏
重载(overload):必须在一个域中,函数名称相同但是函数参数不同,重载的作用就是同一个函数有不同的行为,因此不是在一个域中的函数是无法构成重载的,这个是重载的重要特征覆盖(override):覆盖指的是派生类的虚拟函数覆盖了基类的同名且参数相同的函数,既然是和虚拟函数挂钩,说明了这个是一个多态支持的特性,所谓的覆盖指的是用基类对象的指针或者引用时访问虚拟函数的时候会根据实际的类型转载 2012-09-07 11:00:19 · 503 阅读 · 0 评论 -
C++11 中值得关注的几大变化(详解)
源文章来自前C++标准委员会的 Danny Kalev 的 The Biggest Changes in C++11 (and Why You Should Care),赖勇浩做了一个中文翻译在这里。所以,我就不翻译了,我在这里仅对文中提到的这些变化“追问为什么要引入这些变化”的一个探讨,只有知道为了什么,用在什么地方,我们才能真正学到这个知识。而以此你可以更深入地了解这些变化。所以,本文不是转载 2012-09-07 08:23:32 · 1140 阅读 · 0 评论 -
#、##和__VA_ARGS__
#、##和__VA_ARGS__转自:http://www.cnblogs.com/zhujudah/admin/EditPosts.aspx?opt=11.#假如希望在字符串中包含宏参数,ANSI C允许这样作,在类函数宏的替换部分,#符号用作一个预处理运算符,它可以把语言符号转化程字符串。例如,如果x是一个宏参量,那么#x可以把参数名转化成相应的字符串。该过程称为字符串化(st转载 2012-06-11 13:12:27 · 738 阅读 · 0 评论 -
dynamic_cast详解
作为四个内部类型转换操作符之一的dynamic_cast和传统的C风格的强制类型转换有着巨大的差别。除了dynamic_cast以外的转换,其行为的都是在编译期就得以确定的,转换是否成功,并不依赖被转换的对象。而dynamic_cast则不然。在这里,不再讨论其他三种转换和C风格的转换。首先,dynamic_cast依赖于RTTI信息,其次,在转换时,dynamic_cast会检查转换的sou转载 2011-11-02 22:09:42 · 511 阅读 · 0 评论 -
C99中包括的特性
在ANSI标准化后,C语言的标准在一段相当的时间内都保持不变,尽管C继续在改进。(实际上,NormativeAmendment1在1995年已经开发了一个新的C语言版本。但是这个版本很少为人所知。)标准在90年代才经历了改进,这就是ISO9899:1999(1999年出版)。这个版本就是通常提及的C99。它被ANSI于2000年3月采用。在C99中包括的特性 对编译器限制增加了,比如源程转载 2011-11-17 14:57:43 · 988 阅读 · 0 评论 -
新的C语言: C99标准介绍
新的C语言: C99标准介绍Randy Meyers 此篇文章摘取与即将登载于《Dr.Dobb's 软件研发》》第二期(2003年9月)的《新的C语言,C99标准介绍》,文章主要是介绍了C99的新特性,在得到作者Randy Meyers以及《Dr.Dobb's 软件研发》》负责人刘江先生的应允下,把全文的前面的一部分作为文档发表,希望能对大家有所帮助。译注2: C语言的产生转载 2011-11-17 14:53:02 · 3090 阅读 · 0 评论 -
什么是POD
C++语言中经常会提到POD,就是plain old data的缩写。那么究竟什么是POD呢 维基百科上的解释:http://en.wikipedia.org/wiki/Plain_Old_Data_StructuresA plain old data structu原创 2011-07-14 22:17:11 · 2093 阅读 · 0 评论 -
对象生死劫 - 构造函数和析构函数的异常
对象生死劫 - 构造函数和析构函数的异常构造函数和析构函数分别管理对象的建立和释放,负责对象的诞生和死亡的过程。当一个对象诞生时,构造函数负责创建并初始化对象的内部环境,包括分配内存、创建内部对象和打开相关的外部资源,等等。而当对象死亡时,析构函数负责关闭资源、释放内部的转载 2011-07-08 12:36:56 · 630 阅读 · 0 评论 -
虚函数的效率问题
c++ 虚函数机制 效率问题1,多一次查虚表过程2,虚函数 效率低 是因为 执行过程中会跳转两次(首先找到对象的函数表,其次通过该函数表中存的虚函数表地址找到真正的执行地址),这样CPU运行的时候会跳转两次,而普通函数只跳一次。CPU每跳转一次,预取指令基本上就要作废转载 2011-07-17 14:30:12 · 1094 阅读 · 0 评论 -
Boost智能指针——shared_ptr
Boost智能指针——shared_ptrboost::scoped_ptr虽然简单易用,但它不能共享所有权的特性却大大限制了其使用范围,而boost::shared_ptr可以解决这一局限。顾名思义,boost::shared_ptr是可以共享所有权的智能指针,首先原创 2011-07-03 12:14:44 · 387 阅读 · 0 评论 -
C调用lua脚本的效率测试
#include extern "C"{#include "lua.h"#include "lualib.h"#include "lauxlib.h"}/* Lua解释器指针 */const char LUA_SCRIPT[] ="function loop_add(a, b) "" local sum = 0 "" for i = 1, 100转载 2011-06-17 14:55:00 · 677 阅读 · 0 评论 -
Effective C++学习笔记:确定基类有虚析构函数
Effective C++学习笔记:确定基类有虚析构函数设想在一个军事应用程序里,有一个表示敌人目标的类: class enemytarget{public:enemytarget() { ++numtargets; }enemytarget(co转载 2011-10-12 22:30:50 · 548 阅读 · 0 评论 -
C++虚函数表解析
C++虚函数表解析(转)C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码转载 2011-10-12 21:55:23 · 1109 阅读 · 0 评论 -
C语言中的单精度双精度数的有效位数
#include "stdio.h" #include "conio.h" void main() { printf("%.20f\n",0.1234567890123456789f); getch(); }观察在VC6,WinTC中的运行结果,可转载 2011-10-01 21:52:01 · 7516 阅读 · 0 评论 -
c语言数据类型长度
头文件和中说明了基础数据的长度。float,double和long double的范围就是在IEEE 754标准中提及的典型数据。关键字位长(字节)范围格式化字符串char1-128..127(或0..255,与体系结构相关)%原创 2011-07-18 22:18:05 · 2580 阅读 · 0 评论 -
C语言中位域(bit fields)的可移植问题
网上有文章说C语言的“位域”(bit fields)有可移植性的问题,原因是不同的编译器对位域的实现不同。 我决定用实验验证一下。 一、 实验过程: 1. 准备实验程序 这 是谭浩强C语言课本上第12章12.2节的位域示例程序:原创 2011-07-18 22:20:59 · 1908 阅读 · 1 评论 -
stdin和STDIN_FILENO的区别
stdin和STDIN_FILENO的区别 在unix系统调用中,标准输入描述字用stdin,标准输出用stdout,标准出错用stderr表示,但在一些调用函数,引用了STDIN_FILENO表示标准输入才,同样,标准出入用STDOUT_FILENO,标准出错用ST原创 2011-07-19 08:50:03 · 561 阅读 · 0 评论 -
Assembly Manifest
Assembly Manifest分类: .NET-.net TECHNOLOGY-技术 2009-06-15 10:35 1935人阅读 评论(0) 收藏 举报 Assembly Manifest[现象]对这个问题的研究是起源于这么一个现象:当你用VC++2005(或者其它.NET)写程序后,在自己的计算机上能毫无问题地运行,但是当把此exe文件拷贝到别人电脑转载 2011-11-14 15:04:35 · 1798 阅读 · 0 评论 -
面向对象之继承和组合浅谈
最近一个师弟问某实现是该用对象持有(其实就是组合)还是集成关系实现好。所以就在这里简单的浅谈一下,仅是个人观点,仅供参考。如果写的不对的地方请指出。 首先它们都是实现系统功能重用,代码复用的最常用的有效的设计技巧,都是在设计模式中的基础结构。相信大家已了解的,类继承允许我们根据自己的实现来覆盖重写父类的实现细节,父类的实现对于子类是可见的,所以我们一般称之为白盒复用。对象持有(其实就是转载 2011-11-14 15:39:57 · 704 阅读 · 0 评论 -
K&R C C90,C99的改进
C语言是C++的子集,C++是C语言的超集。C++是在C语言的基础上,添加了面向对象和泛型编程的功能后,扩展而成的。1)起源1970年,AT&T贝尔实验室的Ken Thompson和Dennis Ritchie等人在DEC公司的PDP-7小型机上开发出了Unix操转载 2011-07-25 19:34:16 · 1639 阅读 · 0 评论 -
c语言目标程序中的段
段的分类 根据C语言的特点,每一个源程序生成的目标代码将包含源程序所需要表达的所有信息和功能。目标代码中各段生成情况如下:1.代码段(Code)代码段由程序中的各个函数产生,函数的每一个语句将最终经过编译和汇编生成二进制机器代码(具体生成哪种体系结构的机器代码由编译器原创 2011-07-20 09:32:07 · 1750 阅读 · 0 评论 -
-mms-bitfields gcc和vc关于位域那点事
STOP! Bitfields 与对齐 alignCPU访问内 存时,总是以其整数字长为单位读写。比如 x86 CPU总是从4字节的整数倍数地址上,读取4字节数据,它不能随心所欲地从任何位置开始读取任意长度数据。为了效率考虑,默认情况下编译器总是让整数存放于其长度的整原创 2011-07-18 22:32:03 · 2413 阅读 · 3 评论 -
Effective C++第17条:要在单独的语句中使用智能指针来存储由new创建的对象
第17条: 要在单独的语句中使用智能指针来存储由new创建的对象假设这里有一个函数用来显示处理优先级,另一个函数根据当前优先级为一个动态分配的 Widget 做一些处理: int priority(); void processWidget(std::tr1::s原创 2011-07-03 13:26:30 · 546 阅读 · 0 评论