今天在CSDN上面看到一篇文章,里面的内容刺激了一下。原来C++的类型名也可以用为变量来用,而且通过操作符的重载,整处语句可以产生不可思议的结果。
#include< iostream >
#include< vector >
using namespace std;
typedef int UNIT4;
class Hack{
};
Hack& operator<(Hack &a,Hack &b)
{
std::cerr<<"小于操作符"<<endl;
return a;
}
Hack &operator>(Hack &a,Hack &b)
{
std::cerr<<"大于操作符"<<endl;
return a;
}
int main(int argc,char ** argv)
{
Hack vector;
Hack UNIT4;
Hack foo;
vector<UNIT4> foo;
return 0;
}
其实我第一次看到这个程序,很自然的想到这是定义一个int类型的容器的,谁知道这才是陷阱。
想的跟编译后的结果根本是风牛马不相及呀。
结果:
小于操作符
大于操作符
这是一个学习语言要注意的地方,为了避免以后给这样的陷阱陷害,这里写下提醒自己注意。