判断两个变量的类型是否相同

OnMyWay2010 2010-06-30 04:59:04
如:
int i;
char ch1;
cha ch2;
则ch1和ch2类型相同,
ch1和i类型不相同,
只需要判断静态类型就可以了
谢谢大家!
...全文
405 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
lijie_ai 2010-06-30
  • 打赏
  • 举报
回复
学习一下,
Aniao 2010-06-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 baihacker 的回复:]

C/C++ code
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <typeinfo>
using namespace std;

int main()
{
int i;
char ch1;
char ch2;
cout << (ty……
[/Quote]


没有虚表的类型可以用typeid么?还是内置类型特别照顾
fanster28_ 2010-06-30
  • 打赏
  • 举报
回复
typeid用的rtti,不好 :-)
pengzhixi 2010-06-30
  • 打赏
  • 举报
回复
还有一个继承的问题。
we_sky2008 2010-06-30
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 jinhao 的回复:]
引用 9 楼 baihacker 的回复:

C/C++ code
template<typename T> bool same(T, T) { return true; }
template<typename T, typename U> bool same(T, U){return false;}
int main()
{
int arr[7];
int* ptr;
cout……
[/Quote]
恩,不错
应该修改为:

#include<iostream>

using namespace std;

template <typename T, typename U>
struct IsSameType
{
enum{value = false};
};

template <typename T>
struct IsSameType<T, T>
{
enum{value = true};
};

template <typename T, typename U>
bool IsSameValueType(T&, U&)//防止左值转换导致错误
{
return IsSameType<T, U>::value;
};

int main()
{
int i1;
int i2;
double d;
char ch;
int iarray[10];
int *p;

cout<<IsSameValueType(i1, i2)<<endl;
cout<<IsSameValueType(i1, ch)<<endl;
cout<<IsSameValueType(p, iarray)<<endl;

system("pause");
return 0;
}

yuxiabo1984 2010-06-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 baihacker 的回复:]
C/C++ code
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <typeinfo>
using namespace std;

int main()
{
int i;
char ch1;
char ch2;
……
[/Quote]这个不错的方法
OnMyWay2010 2010-06-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 baihacker 的回复:]
C/C++ code
template<typename T> bool same(T, T) { return true; }
template<typename T, typename U> bool same(T, U){return false;}
int main()
{
int arr[7];
int* ptr;
cout << same(arr, ptr) << endl;
return 0;
}
[/Quote]
这个当两个变量相同时会引起二义性吧?
Jinhao 2010-06-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 baihacker 的回复:]

C/C++ code
template<typename T> bool same(T, T) { return true; }
template<typename T, typename U> bool same(T, U){return false;}
int main()
{
int arr[7];
int* ptr;
cout << same(arr, ptr)……
[/Quote]

哥都忘了 模板参数推导的时候 数组转换为指针.

template<typename T> bool same(const T &, const T &) { return true; }
这是最靠普的。


十六楼的IsSameValueType跟我那有同样的问题。
tjyjx7946358 2010-06-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 baihacker 的回复:]
C/C++ code
template<typename T1, typename T2>
int same_type(const T1&, const T2&)
{
return 0;
}
template<typename T1>
int same_type(const T1&, const T1&)
{
return 1;
……
[/Quote]
顶个。
we_sky2008 2010-06-30
  • 打赏
  • 举报
回复

#include<iostream>

using namespace std;

template <typename T, typename U>
struct IsSameType
{
enum{value = false};
};

template <typename T>
struct IsSameType<T, T>
{
enum{value = true};
};

template <typename T, typename U>
bool IsSameValueType(T, U)
{
return IsSameType<T, U>::value;
};

int main()
{
int i1;
int i2;
double d;
char ch;

cout<<IsSameValueType(d, i2)<<endl;

system("pause");
return 0;
}

healer_kx 2010-06-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 taodm 的回复:]

那,真有必要么,声明都放在那呢,你人肉看一下不就判断出来了。
[/Quote]

嗯,同意~
liutengfeigo 2010-06-30
  • 打赏
  • 举报
回复
高手贴。。。
baihacker 2010-06-30
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 jinhao 的回复:]
引用 9 楼 baihacker 的回复:

C/C++ code
template<typename T> bool same(T, T) { return true; }
template<typename T, typename U> bool same(T, U){return false;}
int main()
{
int arr[7];
int* ptr;
cout……
[/Quote]
不同类型的可以改成不定参数。
Jinhao 2010-06-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 baihacker 的回复:]

C/C++ code
template<typename T> bool same(T, T) { return true; }
template<typename T, typename U> bool same(T, U){return false;}
int main()
{
int arr[7];
int* ptr;
cout << same(arr, ptr)……
[/Quote]
厉害

template<typename T> bool same(T &, T &) { return true; }

arong1234 2010-06-30
  • 打赏
  • 举报
回复
普通类型是不需要判断的,因为一旦定义,类型就固定了,你有什么情况需要进行判断呢?

只有当你在有类的情况下,都是基类指针指向一系列派生类对象时才需要这么做。那么常见的办法是:
1. 把指针dynamic_cast到特定类型来判断是不是那个类型的实例
2. 增加虚函数(如MFC的IsKindOf)来判断
lvshaoqing 2010-06-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 baihacker 的回复:]
C/C++ code
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <typeinfo>
using namespace std;

int main()
{
int i;
char ch1;
char ch2;
……
[/Quote]

牛。。。。
baihacker 2010-06-30
  • 打赏
  • 举报
回复
template<typename T> bool same(T, T) { return true; }
template<typename T, typename U> bool same(T, U){return false;}
int main()
{
int arr[7];
int* ptr;
cout << same(arr, ptr) << endl;
return 0;
}
cattycat 2010-06-30
  • 打赏
  • 举报
回复
typeid可以判断。如果是类类型,还可以用dynamic_cast看能否转换成功来看是否某一个类的子类。
baihacker 2010-06-30
  • 打赏
  • 举报
回复
template<typename T1, typename T2>
int same_type(const T1&, const T2&)
{
return 0;
}
template<typename T1>
int same_type(const T1&, const T1&)
{
return 1;
}
int main()
{
int i;
char ch1;
char ch2;
cout << same_type(i, ch1) << endl;
cout << same_type(ch1, ch2) << endl;
return 0;
}
AlanBruce 2010-06-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 baihacker 的回复:]

C/C++ code
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <typeinfo>
using namespace std;

int main()
{
int i;
char ch1;
char ch2;
cout << (ty……
[/Quote]

这么快
加载更多回复(5)

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧