2007年4月27日星期五

Autorun病毒rundll.exe

autorun.inf、rundll.exe、rundll86.exe、rundll32.exe、rundll16.exe、npkpdb.dll、c_10083.nls、UTF-8.nls
 
今天发现自己的电脑中毒了,双击C,D盘的时候会产生一个没有图标的rundll.exe文件,而且没有办法打开控制台。
上网查了查,看到一个博客上有解决方法,他还给出了一个vbs脚本用来杀毒,试了试,的确不错。
谢谢了。

2007年4月26日星期四

关于typename

有人问我在一个template function里面有时候声明一个变量前面加了一个typename关键字,不知道有什么作用。
晚上回家翻Effecti C++的时候看到了这个东西。我也留心看了一下。
在写模板函数的时候自然而然的要在函数内部用到用template参数定义的数据类型。但是当你用这个template参数来定义变量的时候就会出以下的问题:template参数可能和已有的实际类型重复。举个例子

template<typename C>
void print2nd(const C& container){
C::interator *x;
}

这个地方本意是声明一个C类的迭代器的指针,但是如果C::interator刚好就是一个C的成员变量,而x又刚好是一个全局的变量呢?
那就把声明局部变量变成了一个乘法运算了,有歧义了。
加上typename关键字,就等于告诉编译器:这是个iterator类型,不是乘法。

typename C::iterator *x;

但要注意,这个用法只用在"嵌套从属名称"上面
template<typename C>
void f(const C &container, //这个地方不需要用,也不能用
typename C::iterator iter); //一定要用