摘要:
异常安全的代码是指,满足两个条件1异常中立性 :是指当你的代码(包括你调用的代码)引发异常时,这个异常 能保持原样传递到外层调用代码。(异常中立,就是指任何底层的异常都会抛出到上层,也就相当于是异常透明的。)2.异常安全性:抛出异常后,资源不泄露,抛出异常后,不会使原有数据恶化(例如正常指针变野指针... 阅读全文
随笔分类 - C++
__BEGIN_DECLS __END_DECLS
2015-02-14 17:44 by youxin, 977 阅读, 收藏, 编辑
摘要:
http://hi.baidu.com/xiaoxiaolq/blog/item/1edc2af30dd4915a342acc5e.html对__BEGIN_DECLS和 __END_DECLS 的理解在C语言代码中头文件中,充斥着下面的代码片段:(sys/cdefs.h)__BEGIN_DECLS... 阅读全文
转:探索C++0x: 1. 静态断言(static_assert)
2015-02-13 17:26 by youxin, 484 阅读, 收藏, 编辑
摘要:
转自:http://www.cppblog.com/thesys/articles/116985.html简介C++0x中引入了static_assert这个关键字,用来做编译期间的断言,因此叫做静态断言。其语法很简单:static_assert(常量表达式,提示字符串)。如果第一个参数常量表达式的... 阅读全文
likely(x)与unlikely(x) __builtin_expect
2015-02-13 15:39 by youxin, 937 阅读, 收藏, 编辑
摘要:
本文讲的likely()和unlikely()两个宏,在linux内核代码和一些应用中可常见到它们的身影。实质上,这两个宏是关于GCC编译器内置宏__builtin_expect的使用。顾名思义,likely()指“很有可能”之意,而unlikely()指“不太可能”之意。那么,在实际应用中,它们代... 阅读全文
c++ ScopeExitGuard
2015-02-09 17:46 by youxin, 2121 阅读, 收藏, 编辑
摘要:
说到Native Languages就不得不说资源管理,因为资源管理向来都是Native Languages的一个大问题,其中内存管理又是资源当中的一个大问题,由于堆内存需要手动分配和释放,所以必须确保内存得到释放,对此一般原则是“谁分配谁负责释放”,但即便如此仍然还是经常会导致内存泄漏、野指针等等... 阅读全文
c++ 11 bind function
2015-02-09 17:17 by youxin, 1537 阅读, 收藏, 编辑
摘要:
Year 2011陈 良乔C++11 FAQstd::function 和 std::bind标准库函数bind()和function()定义于头文件中(该头文件还包括许多其他函数对象),用于处理函数及函数参数。bind()接受一个函数(或者函数对象,或者任何你可以通过”(…)”符号调用的事物),生... 阅读全文
slot signal机制
2014-11-19 11:12 by youxin, 1506 阅读, 收藏, 编辑
摘要:
有一个比较 经典的实现:http://sigslot.sourceforge.net/很精简的 signal slot的实现,跨平台。webrtc项目在用,我在自己项目里也用了。这个源码有2000多行,但是一大半是为了模板适配不同个数的参数的代码,干货不足1000行。附上代码链接,这个项目只有一个头... 阅读全文
c语言头文件和源文件不在同一个目录
2014-09-24 14:11 by youxin, 8279 阅读, 收藏, 编辑
摘要:
http://www.cnblogs.com/ShaneZhang/archive/2013/05/20/3088688.html从工程上讲,头文件的文件名应该与对应的源文件名相同便于维护,如果头文件中包含了多个源文件中的定义或声明,则应该按源文件分组布局头文件中的代码,并且通过注释注明每组所在的源... 阅读全文
c++ RAII 资源管理就是初始化
2014-06-18 15:31 by youxin, 855 阅读, 收藏, 编辑
摘要:
RAII:(Resource Acquisition Is Initialization),也就是“资源获取就是初始化”,是C++语言的一种管理资源、避免泄漏的惯用法。C++标准保证任何情况下,已构造的对象最终会销毁,即它的析构函数最终会被调用。简单的说,RAII 的做法是使用一个对象,在其构造时获... 阅读全文
c++ RTTI(runtime type info)
2014-05-18 13:58 by youxin, 1132 阅读, 收藏, 编辑
摘要:
RTTI(Run-Time Type Information,通过运行时类型信息)程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型.RTTI提供了以下两个非常有用的操作符:(1)typeid操作符,返回指针和引用所指的实际类型。(2)dynamic_cast操作符,将基类类型... 阅读全文
c++重载、覆盖和隐藏
2014-05-14 00:04 by youxin, 517 阅读, 收藏, 编辑
摘要:
看以前的:http://www.cnblogs.com/youxin/p/3305688.html答案:a.成员函数被重载的特征:overload(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual关键字可有可无。b.覆盖override是指派生类函数覆盖基类函... 阅读全文
c++ 名字粉碎(name mangling)
2014-05-12 22:50 by youxin, 1057 阅读, 收藏, 编辑
摘要:
转自Ibm:Name mangling is the encoding of function and variable names into unique names so that linkers can separate common names in the language. Type n... 阅读全文
《深度探索c++对象模型》chapter3 Data语意学
2014-05-12 22:29 by youxin, 353 阅读, 收藏, 编辑
摘要:
一个空的class:如class X{} ;sizeof(X)==1;sizeof为什么为1,他有一个隐晦的1 byte,那是被编译器安插进去的一个char,这使得class2的两个objects得以在内存中配置独一无二的地址:X a,b;if(&a==&b) cerrx+=pt.x;this-> ... 阅读全文
vs查看虚函数表和类内存布局
2014-05-12 22:27 by youxin, 3547 阅读, 收藏, 编辑
摘要:
虚继承和虚基类 虚继承:在继承定义中包含了virtual关键字的继承关系; 虚基类:在虚继承体系中的通过virtual继承而来的基类,需要注意的是:class CSubClass : public virtual CBase {}; 其中CBase称之为CSubClass的虚基类,而不是说CBase 阅读全文
cout输出字符串指针
2014-05-12 18:17 by youxin, 2843 阅读, 收藏, 编辑
摘要:
先给出通过字符型指针输出字符串的示例代码,如下:#include using std::cout;using std::endl; int main(){ const char *pszStr = "this is a string"; // 输出字符串 cout int ma... 阅读全文
《深度探索c++对象模型》chapter2 构造函数语义学
2014-05-12 16:53 by youxin, 381 阅读, 收藏, 编辑
摘要:
关于c++,最常听到的一个抱怨是,编译器背着程序员做了太多事情,conversion运算符是最常被引用的一个例子:jerry schwarz,iostream函数库的建筑师,就曾经说过一个故事,他说他最早的意图是支持一个iostream class object的纯量测算(scalar test),... 阅读全文
c++virtual inline 是否冲突
2014-05-12 00:58 by youxin, 2123 阅读, 收藏, 编辑
摘要:
关于inline关键字:effective c++ item33:明智运用inlining。说到:inline指令就像register指令一样,只是对编译器的一种提示,而不是一个强制命令,意思是编译器可自由决定要不要忽略你的inline指令。大部分编译器会拒绝将复杂的(也就是内含循环或递归调用的)函... 阅读全文
《深度探索c++对象模型》chapter1关于对象对象模型
2014-05-11 19:17 by youxin, 390 阅读, 收藏, 编辑
摘要:
在c++中,有2种class data member:static和nostatic,以及3钟class member function:static,nostatic和virtual。已知下面这个class Point声明:class Point{public: Point(float xv... 阅读全文
《More Effective C++》 条款5 谨慎定义类型转换函数
2014-05-10 23:48 by youxin, 327 阅读, 收藏, 编辑
摘要:
---恢复内容开始---C++编译器能够在两种数据类型之间进行隐式转换(implicit conversions),它继承了C语言的转换方法,例如允许把char隐式转换为int和从short隐式转换为double。因此当你把一个short值传递给准备接受double参数值的函数时,依然可以成功运行。... 阅读全文
《Effective C++》条款26 防卫潜伏的ambiguity模棱两可的状态
2014-05-10 23:17 by youxin, 283 阅读, 收藏, 编辑
摘要:
每个人都有思想。有些人相信自由经济学,有些人相信来生。有些人甚至相信COBOL是一种真正的程序设计语言。C++也有一种思想:它认为潜在的二义性不是一种错误。ambiguity这是潜在二义性的一个例子:class B; // 对类B提前声明 // ... 阅读全文