Home

Vim轻量级缓冲区管理插件Buf_it修订版Buf_itv2

# 之前发布了Vim的缓冲区管理插件Buf_it的一个修正版,但是后来发现在windows下命令行使用的时候有问题,同时与Nertree和Taglist等插件也有冲突。于是继续fix了几个bug,然后解决了这部分冲突,新的代码放在我的[github][1]上,或者也可以这里下载,有问题可以继续留言,谢谢。 效果如下: ![效果图][2] 安装: 扔进plugin目录就行 配置 nnoremap wq :w:call BufClose(0) nnoremap q :call BufClose(0) nnoremap w :w nnoremap x :call BufClose(1) 使用 shift h,l :左右切换tab \be :BufEch...

Read more

关于Const指针的一点补充

# OsChina上一个朋友给出的例子,很能说明问题: typedef char * CharPtr; const CharPtr mycharptr = "Hello, World"; mycharptr[0]='h'; //OK[1] mycharptr = "It's Wrong"; //Err[2] 如果把CharPtr替代掉的话,那么似乎[1]是错的,[2]是对的,因为const char _是指向const char的指针,指针可以指向别的,但是指向的内容不能变。实际上,const只是编译器的一种规范,所以编译的时候只按照语法检查是不是改变了,char_被typedef之后,可以当成一种简单类型看,那么const CharPtr 就只一个CharPtr型的常量,对它...

Read more

深入解析C++输入输出运算符重载

其实算不上什么深入解析,只不过最近看CArchive类的实现,其中一些写法完全颠覆了我对输入输出运算符重载的一些理解,所以在这里mark一下。 我们以输出运算符为例。首先输出运算符重载的一般形式是 :::cpp friend ostream& operator<<(ostream& o,const ClassName& c);[1]

Read more

简短总结一下C#里跨线程更新UI

跨线程更新UI是写多线程程序尤其是通信类的程序经常遇到的问题,这里面主要的问题是冲突,比如数据线程想要更新UI的时候,用户同时也在更新UI,就会出现争用。C#里可以用 Control.CheckForIllegalCrossThreadCalls = false; 来关闭跨线程检测。但是这样做有一定的风险,容易让程序崩溃。 最好的办法是通过Invoke,这篇博客只是提供一个示例,至于那些线程同步、Invoke和BeginInvoke,Invoke底层实现神马的,有空再说吧。 一个简单的例子如下:(注,Form1 加入了一个名为txt的TextBox) using System; using System.Collections.Generic; using System.C...

Read more

C++变量的初始化方式

# 写这个问题是受微软今年实习生招聘的一道笔试题启发,上一篇博客好像提到了。之前还真没细想过这些事情。 首先把需要初始化的成员变量分为几类: 一般变量(int) 静态成员变量(static int) 常量(const int ) 静态常量(static const int) 对应的初始化方式是: 一般变量可以在初始化列表里或者构造函数里初始化,不能直接初始化或者类外初始化 静态成员变量必须在类外初始化 常量必须在初始化列表里初始化 静态常量必须只能在定义的时候初始化 举一个简单的例子 #include using namespace std; class Test { private: int a; s...

Read more