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