自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ssss1223ss的专栏

道可道,非常道

  • 博客(15)
  • 收藏
  • 关注

原创 accept返回的fd是否继承listen fd的options

<<UNIX Netwok programming>> 7.4The following socket options are inherited by a connected TCP socket from the listening socket: SO_DEBUG,SO_DONTROUTE,SO_KEEPALIVE,SO_LINGER,SO_OOBINLINE,S...

2019-05-03 13:15:22 519

原创 memcpy自定义对象带来的问题

引言c++11前没有右值引用,我们怎么将一个包含资源的临时对象和“将亡值”转移或者交换到自己的变量中呢?我以前的做法是bitwise swap,即将两个对象的内存按位交换。这种做法一直工作得很好,直到最近一段代码在Linux上运行很OK换到windows上就崩溃,我才开始思考这种做法的安全性。出事代码公司代码有个线程调度框架,接口像极了WIN32程序窗口回调函数,通过一个整形MSGID来投递...

2019-04-29 08:38:08 594

原创 c++编译器bug记录

本文档意在记录工作中使用c++编译器(vc++、g++、clang++等)遇到的编译问题,虽然最终迂回解决,但不知其所以然,遂记录文档以便后面有时间思其所以然。1. 禁用拷贝构造函数,非explicit单参构造函数,无法使用=显式初始化1. 编译环境$ gcc --versiongcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36)Copyright ...

2019-04-27 22:16:09 303

原创 std::unordered_map如何使用不同类型的Key

std::unordered_map是c++11引入的关联容器,其HashMap特性和std::map的区别且不讨论,我们先看它的find和count方法:iterator find( const Key& key );(1) iterator find( const Key& key, size_t hash );(1) (C++20 起)const_iterator fi...

2019-04-13 13:16:34 1404

原创 rust引用变量定义时类型声明的特殊用法

先看下面2段代码,代码A:let mut a = 12;let b = &mut a;let c = b;*c = 123;println!("{}", b);代码B:let mut a = 12;let b = &mut a;let c: &mut i32 = b;*c = 123;println!("{}", b);唯一区别就是变量c的定...

2019-04-08 08:26:12 582

原创 golang的空标识符理解

我们有时候看到这样的golang代码:import _ "net/http/pprof"或for _, c := range "11234" { log.Println(c)}或var _ io.Reader = (* XXX)(nil) //全局变量或var _ = Suite(&amp;HelloWorldTest{})代码中_很独特的样子:说...

2018-02-04 19:51:59 1053

原创 c++之option模式

引言我们经常在golang代码中看到这样一种惯用法:根据选项option或者配置config创建一个对象,而创建对象的工厂函数CreateXXX的输入参数不是一个大的选项结构体Options,而是Option的变长参数。举个例子:func main() { p := CreatePersion(WithID(123), WithName("tom")) log.Printl

2018-02-03 15:57:19 5330

原创 state-thread代码解读

state-thread是一个使用longjmp实现的N:1协程库,实现了大部分网络IO接口,编写单线程网络程序非常方便,同时保证超高性能。代码结构清晰,代码量小,设计思路一目了然。能想到的缺点可能就是:不支持windows平台,不支持N:M线程+协程方式。后记先挖个坑,有时间了再慢慢补充。

2018-02-03 12:23:51 790

原创 golang实现try-catch-finally机制

面向对象的编程语言往往都会支持语言级别的异常处理,比如c++使用关键字try开始异常语句块, catch捕获异常,throw抛出异常:try { throw 1; throw std::logic_error("user defined exception");} catch (int e) { std::clog std::endl;} catch (const

2018-01-30 23:19:40 4833 2

原创 c++11之运行期获取tuple元素

代码先行// 运行期以索引获取tuple元素// 需支持C++11及以上标准的编译器,VS2017 15.5.x、CodeBlocks 16.01 gcc 7.2// 参考《深入应用C++11:代码优化与工程级应用》p148,祁宇,机械工业出版社,2015年05templatetypename Visit>void VisitTuple(size_t index, std::tuple

2018-01-22 14:10:57 1858

原创 谈一谈c++中的unevaluated operand

谈一谈c++中的unevaluated operand什么是unevaluated operand我们先看2段外文: In some contexts, unevaluated operands appear (5.2.8, 5.3.3, 5.3.7, 7.1.6.2). An unevaluated operand is not evaluated. An unevaluated operan

2017-03-05 13:00:31 1008

原创 从2段已序的数组中查找某一个数的算法

朋友最近面试某公司,被一道笔试题难住,最后被无情pass了。题目大致是:int a[] 由2个已序且范围无交叉的序列组成,比如4,5,6,7,1,2,3,从中查找指定的数。要求时间复杂度小于O(N)。算法思路首先想到的是折半查找,时间复杂度应该为O(log N)。假设数组起始位置为x和y,折半位置为h,2个序列边界为*,查找数的位置为n。数组表示为: |-------

2017-03-03 12:12:34 432

原创 获取一个数的下一个2的指数值

云风写的buddy内存分配器有这样一个函数,实现获取一个数的下一个2的指数值。我还没搞懂原理,先记下来,以后仔细研究研究。 代码如下:static inline intis_pow_of_2(uint32_t x) { return !(x & (x-1));}static inline uint32_tnext_pow_of_2(uint32_t x) { if ( is_pow_o

2017-03-02 09:45:22 446

原创 如何判断一个类型是否重载了输出操作符

需要编译器支持c++14,直接上代码。template<typename T, typename = void>struct IsOverloadOsOperator : std::false_type {};template<typename T>struct IsOverloadOsOperator <T, std::void_t<decltype( *(std::ostream *)nul

2017-03-01 20:45:23 642

原创 sprintf的三个要点

width之误解当使用s格式化字符串时prec可以截取控制字符串的长度widthprec均可用代替在参数列表指定数值函数原型:int sprintf(const char *fmt, …),其中fmt格式为:%[width][.prec][type]width之误解 width为字符的最小长度,如果不够,默认以空格右补齐。很多人误以为是最大长度限制,写出内存写越界的bug。比如: c

2017-03-01 20:40:00 670

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除