枚举变量扩展

阅读更多关于《枚举变量扩展》

在很多配置文件中,都会牵涉到变量扩展,一个变量会有多少种可能的扩展结果,这在静态分析中非常重要。这里给出一个算法,使用 perl 来表达(expand.pl),变量引用使用统一的形式:${varname}。 继续阅读

gcc C++0x unique_ptr 实现太龌龊了

阅读更多关于《gcc C++0x unique_ptr 实现太龌龊了》

版本:g++ 4.6.0

龌龊之处: 继续阅读

C++0x 几个很败的修改

阅读更多关于《C++0x 几个很败的修改》

Until November 2009, std::future was named std::unique_future

Until November 2010, std::launch::deferred was named std::launch::sync.


 

 

非对称类型的 Comparator

阅读更多关于《非对称类型的 Comparator》

 

结构体数组,按字段查找

我有一个按字段 name 排好序的结构体数组,怎样使用 stl 来查找?

 

 

 

怎样定义 CompareName ?

 

 

一般的 Compare 这样定义:

 

这样的 Compare 只能用于排序,如果要用于查找,我们必须先构造一个 User 对象,再把想查找的name assign 这个 User::name, ….

 

terminal 的显示编码为 utf8 时用 vim 打开 gb2312/gbk/gb18030 编码的文件

阅读更多关于《terminal 的显示编码为 utf8 时用 vim 打开 gb2312/gbk/gb18030 编码的文件》

vim "+e ++enc=gbk filename"

vim "+e ++enc=cp936 filename"

 

 

怎样区分 const char* 和字符串文字量

阅读更多关于《怎样区分 const char* 和字符串文字量》

在一个面试中,猛然间一闪念,问到了 candidate 这个问题。无解……

 

stl 中使用到了很多 traits 技术,只要懂得 traits ,这个问题就太简单了!以下是代码示例:

软件工程中很多地方,如果采用直接的办法不能解决问题,增加一个间接层,问题即迎刃而解,type_traits 就是这样一种技术,这个代码示例是自包含的,除了 printf ,没有任何其它外部依赖。

 

 

 

为什么下面这样的代码不能work?

 

答案:C++的重载匹配规则:如果在非模板的候选中能找到一个”精确”匹配,就不会去找模板。”精确”的精确定义包含3大类,5种具体情况,按顺序如下:

Identity Conversion —- 不需要任何转化,最精确,级别 1

Lvalue to Rvalue Conversion — 左值到右值转化,  级别 2

Array to Pointer Conversion — 数组到指针转化,  级别 3

Function to Pointer             — 函数名到函数指针, 级别 4,这就是为什么很多时候我们不需要使用 &func_name 而直接使用 func_name

 

Quolification Conversion      — cv qualify 少的可以转化到 cv qualify 多的,级别 5

 

这也就是为什么下面的代码可以 work:

 

char -> int 不是 exact match, 是 integeral promotion.

 

long -> int 不是 exact match, 是 integeral conversion.