C++的类型名居然可以当变量
2009-12-06 22:55
176 查看
今天在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类型的容器的,谁知道这才是陷阱。
想的跟编译后的结果根本是风牛马不相及呀。
结果:
小于操作符
大于操作符
这是一个学习语言要注意的地方,为了避免以后给这样的陷阱陷害,这里写下提醒自己注意。
#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类型的容器的,谁知道这才是陷阱。
想的跟编译后的结果根本是风牛马不相及呀。
结果:
小于操作符
大于操作符
这是一个学习语言要注意的地方,为了避免以后给这样的陷阱陷害,这里写下提醒自己注意。
相关文章推荐
- C++中class与struct的区别(struct的类型名同时可以作为变量名)
- C++中class与struct的区别(struct的类型名同时可以作为变量名)
- C++中的初始化列表中可以对那些变量或对象进行初始化
- C++---基础篇(关键字/变量/常量/数据类型)
- 如何在编译时刻判断两个类型是否可以自动转换?——《Modern C++ Design》读书笔记(1)
- C++变量初始化与基本数据类型
- C++中将字符串作为参数传递,应采用什么类型变量
- C++ PRIMER之2 基础类型和变量
- c++ Premier 学习笔记(unit2 变量和基本类型
- C++学习笔记 | 第二章 变量和基本类型 | (3)
- C/C++每日一课 >> [原创]细说如何确定一个变量的类型(2005-04-25)
- C++中的类中的各种类型的常、变量的定义方法
- C++_类_不同类型成员变量的初始化方式
- 一个变量被赋予了某个数据类型的值,可以随时再赋予这个变量其它数据类型的值
- C++基础<02>—变量和基本类型
- 解决 C++ Bulider 变量类型转换问题
- C++中不同类型变量对应的字节数
- C++临时变量的另类应用:基于iostream的类型安全的log接口设计
- 从汇编看c++中变量类型的深入分析
- c++基础:const,变量的作用域和生存期,存储类型