C++ 中让对象的拷贝成为 显式 的

阅读更多关于《C++ 中让对象的拷贝成为 显式 的》

C++中对象的拷贝一般使用拷贝构造函数,从而对象的拷贝大多是隐式的,使用拷贝构造函数的隐式拷贝很方便,但是编译器无法识别不必要的拷贝,虽然我们人类可以识别这些不必要的拷贝,比如在写函数原型时,忘了加&,就会引发一个这样的非必要拷贝。 继续阅读

C++11: 使用 lambda 创建模板类 的 对象

阅读更多关于《C++11: 使用 lambda 创建模板类 的 对象》

C++ 中 lambda 可以直接传递给模板函数如 std::sort, 但无法传给模板类如 std::map,但是,使用一点小技巧,可以使用 lambda 创建模板类的对象,省了很多麻烦的 coding。这里给出一个示例: 继续阅读

Recursive Lambda in C++

阅读更多关于《Recursive Lambda in C++》

C++ 标准委员会真是太死板了,既然给 C++ 增加了 lambda,就真的按部就班地套用 lambda 的标准定义,也不加个 lambda的自引用机制。找了半天,除了那些学院派的足以把99%的人搞晕的 Fix Point + Y combinator,一个最实用的解决方案就是把 lambda bind 到 std::function<…>. 继续阅读

Name lookup take place before access control

阅读更多关于《Name lookup take place before access control》

Yes, "1." is a floating point number.

hash_strmap & gold_hash_map update

阅读更多关于《hash_strmap & gold_hash_map update》

hash_strmap

在不增加任何额外成本的情况下,string pool 中每个 string 消耗的内存,平均情况下,减少了一个字节。太不值一提。 继续阅读

linux kernel 中的二叉树搜索 与 stl 相应物的对比

阅读更多关于《linux kernel 中的二叉树搜索 与 stl 相应物的对比》

Linux kernel 中也使用并实现了红黑树,但是查找算法没有自己实现,而是希望使用者去实现。如果只是实现一个精确查找的函数,这很简单,几乎每个人都能写出正确的代码: 继续阅读

C++ Question: using

阅读更多关于《C++ Question: using》

下面这段代码,运行结果会如何呢?

  • A. B::f
  • B. #1 编译错
  • C. #2 编译错
  • D. #3 编译错

C++ 2-phase lookup

阅读更多关于《C++ 2-phase lookup》

This 2-phase look up of g++ (gnu C++) seems not inconsistency: builtin types are not treat equivalent with user defined type. 继续阅读

小技巧,大智慧:%n of sscanf

阅读更多关于《小技巧,大智慧:%n of sscanf》

scanf 系列中有个函数 sscanf,可能有人用过,它的普通用法,我就不讲了,可以参考这里:man 3 sscanf

gnu c 实现了 C 标准的 format specify 的 %n,它的含义是返回从该次 XXscanf 调用开始到此读了多少个字节,我们可以利用这一点,来实现不需要内存分配的%s继续阅读

缓存与平行数组在 hash_strmap 和 gold_hash_map 中的应用

阅读更多关于《缓存与平行数组在 hash_strmap 和 gold_hash_map 中的应用》

2007 年我写过一篇关于平行数组与CPU缓存文章,最近,我在 hash_strmap 和 gold_hash_map 中应用了这种设计思想,有这么几个字段可以使用平行数组: 继续阅读