摘要: 起源是这样一道题目: 于是想到通过word dict来算一下: 先去下载了中文词库: ..... 阅读全文
posted @ 2015-01-05 23:46 HarryChenThu 阅读(371) 评论(0) 推荐(0) 编辑
摘要: 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只是编译器的一种规范,所以编译的时候只按照语 阅读全文
posted @ 2012-05-10 13:30 HarryChenThu 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 这三个名字可能很绕,看着也很不一样,但其实是三个很容易混淆的概念,并且经常在实际编程中遇到。这里拿出来比较一下。 首先是强制类型转换运算符的重载,作用是当前对象向其他类型的转换,常见的形式是operator int();Integer::operator int(){ return x;} 调用方式类似于Integer c(10);int a=c; 在函数调用的时候,类型转换的重载也会被隐式调用,比如下面一种情况void print(int n){ cout<<n<<endl;}Integer i(10);print(i); 与之相对应的是赋值运算符重载,赋值运算符是从 阅读全文
posted @ 2012-05-08 23:36 HarryChenThu 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 其实算不上什么深入解析,只不过最近看CArchive类的实现,其中一些写法完全颠覆了我对输入输出运算符重载的一些理解,所以在这里mark一下。 我们以输出运算符为例。首先输出运算符重载的一般形式是friend ostream& operator<<(ostream& o,const ClassName& c);[1] ostream是c++流输出的类,至于友元,只记得说输入输出运算符必须用友元重载,因为ostream是受保护的。今天看CArchive类实现的时候,里面有如下的定义friend CArchive& AFXAPI operator> 阅读全文
posted @ 2012-05-07 22:45 HarryChenThu 阅读(777) 评论(0) 推荐(0) 编辑
摘要: 跨线程更新UI是写多线程程序尤其是通信类的程序经常遇到的问题,这里面主要的问题是冲突,比如数据线程想要更新UI的时候,用户同时也在更新UI,就会出现争用。C#里可以用Control.CheckForIllegalCrossThreadCalls = false; 来关闭跨线程检测。但是这样做有一定的风险,容易让程序崩溃。 最好的办法是通过Invoke,这篇博客只是提供一个示例,至于那些线程同步、Invoke和BeginInvoke,Invoke底层实现神马的,有空再说吧。 一个简单的例子如下:(注,Form1 加入了一个名为txt的TextBox)using System;using S... 阅读全文
posted @ 2012-04-16 14:56 HarryChenThu 阅读(445) 评论(0) 推荐(0) 编辑
摘要: 这问题确实挺烦的,据说常见于某些ThinkPad系的笔记本,具体表现是不停的报Unable to enumerate USB device….. 的错误,而在某些Linux版本(比如pinguy os)下会不停提示Device Recognized和Device Removed,有人提供了如[1]的解决方案,但是好像在pinguy os 下并无效果,而且这实际上就是禁用了usb2.0,还有人直接禁用了全部usb。 这里面好像有硬件问题,但是如果是Thinkpad系普遍的问题的话,也就有点说不过去了,硬件不检测好就出场,这也不是Thinkpad的风格。后来想到会不会是指纹识别的问题,于是在... 阅读全文
posted @ 2012-04-14 21:34 HarryChenThu 阅读(2723) 评论(0) 推荐(0) 编辑
摘要: java和C#语言里类变量初始化的顺序是1 类成员变量初始化先于类的构造函数2 静态成员变量先于实例变量3 父类成员变量先于子类成员变量 C#相反4 父类构造函数先于子类构造函数 举一个java的例子:class Base{ public static Test a=new Test("a"); public static Test b; public Test c=new Test("c"); public Test d; static { b=new Test("b"); } public Base() { d=new Test( 阅读全文
posted @ 2012-04-09 20:30 HarryChenThu 阅读(427) 评论(0) 推荐(0) 编辑
摘要: 写这个问题是受微软今年实习生招聘的一道笔试题启发,上一篇博客好像提到了。之前还真没细想过这些事情。 首先把需要初始化的成员变量分为几类:一般变量(int)静态成员变量(static int)常量(const int )静态常量(static const int) 对应的初始化方式是:一般变量可以在初始化列表里或者构造函数里初始化,不能直接初始化或者类外初始化静态成员变量必须在类外初始化常量必须在初始化列表里初始化静态常量必须只能在定义的时候初始化 举一个简单的例子#include <iostream>#include <string>using namespace st 阅读全文
posted @ 2012-04-09 17:47 HarryChenThu 阅读(876) 评论(0) 推荐(0) 编辑
摘要: const和指针的问题是笔试里经常出现的问题。这里综合一下各种不同的情况。 首先是几种const与指针组合的区分,比如:int b = 500;const int* a = &b; [1]int const *a = &b; [2]int* const a = &b; [3]const int* const a = &b; [4] [1]和[2]其实是一样的,都是指向int型常量的指针,而[3]是int型常量指针,两者的区别是指向常量的指针本身可以指向别的,所指向的数据不能被修改,而常量指针本身不能被修改。[4]就不用说了,啥都甭想改。 至于例子,可以举下面的一 阅读全文
posted @ 2012-04-07 23:23 HarryChenThu 阅读(252) 评论(0) 推荐(0) 编辑
摘要: Apache地址重写的配置分为两种方式,即通过httpd.conf配置和.htaccess文件。 首先要打开rewrite模块,windows下的配置是LoadModule rewrite_module modules/mod_rewrite.so httpd.conf的配置可以全局生效,也可以只配置一个目录,需要做的事情是在相应目录的Directory标签下配置Rewrite规则。 .htaccess的则放到相应目录下(或者根目录)即可,这是VPS里常用的一种方式,毕竟作为一个VPS购买者不可能要求提供商去更改全局配置文件。这种方式需要注意的有如下两点: 首先,.htaccess要想起... 阅读全文
posted @ 2012-04-02 19:56 HarryChenThu 阅读(277) 评论(0) 推荐(0) 编辑