https://blog.youkuaiyun.com/three_bird/article/details/51479175 http://www.cppblog.com/smagle/archive/2010/05/14/115286.html