const 参数 C++11类型转换,编译不过

oN5GrzoN 2014-08-29 11:35:59
	struct A
{

};
struct B : A
{

};
struct C : A
{

};

void fun(const A* a)
{
const B* b = const_cast<B*>(dynamic_cast<B*>(a));//dynamic_cast、static_cast几种都试过了,都编译不过
cout<<b<<endl();
}
...全文
127 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2014-09-01
  • 打赏
  • 举报
回复
C++四个特定显式强制转换, 是各有用途的 不用在对应的地方,对了是凑巧 不对是正常 子类(指针,引用)转换成基类(指针,引用)不需要任何显式强制转换 反之需要 实际上,这个强制转换本来就是错误用法, 因为可以使用虚函数的地方,不需要强制转换 只有为了某种特殊用途(例如MFC框架),才需要dynamic_cast 如果你用了dynamic_cast 大部分情况是,你的设计有问题,而不是你的真的需要dynamic_cast
oN5GrzoN 2014-08-29
  • 打赏
  • 举报
回复
引用 1 楼 Jenf_Mu 的回复:
inline void fun(const A* a)
	{
		A* a1 = const_cast<A*>(a);
		const B* b = static_cast<B*>(a1);
		cout<<b<<endl;
	}
问一下

struct A
	{
		int a;
	};
	struct B : A
	{
		int b;
		void display() const
		{
			cout<<b<<endl;
		}
	};
	struct C : A
	{

	};

	inline void fun(const A* a)
	{
		const B* b = static_cast<const B*>(a);
		b->display();
		cout<<b<<endl;
	}

	inline void test()
	{
		B b;
		b.b = 100;
		fun(&b);
		C c;
		fun(&c);
	}
这种情况下,用 dynamic_cast会报错,因为类B没有虚函数,不是多态的. 但用static_cast的话,像struct C这里就错了,但它不能检测出来,怎么办呢?
神奕 2014-08-29
  • 打赏
  • 举报
回复

const B* b = static_cast<const B*>(a);
Jenf_Mu 2014-08-29
  • 打赏
  • 举报
回复
inline void fun(const A* a)
	{
		A* a1 = const_cast<A*>(a);
		const B* b = static_cast<B*>(a1);
		cout<<b<<endl;
	}
Jenf_Mu 2014-08-29
  • 打赏
  • 举报
回复
引用 3 楼 oN5GrzoN 的回复:
[quote=引用 1 楼 Jenf_Mu 的回复:]
inline void fun(const A* a)
	{
		A* a1 = const_cast<A*>(a);
		const B* b = static_cast<B*>(a1);
		cout<<b<<endl;
	}
问一下

struct A
	{
		int a;
	};
	struct B : A
	{
		int b;
		void display() const
		{
			cout<<b<<endl;
		}
	};
	struct C : A
	{

	};

	inline void fun(const A* a)
	{
		const B* b = static_cast<const B*>(a);
		b->display();
		cout<<b<<endl;
	}

	inline void test()
	{
		B b;
		b.b = 100;
		fun(&b);
		C c;
		fun(&c);
	}
这种情况下,用 dynamic_cast会报错,因为类B没有虚函数,不是多态的. 但用static_cast的话,像struct C这里就错了,但它不能检测出来,怎么办呢?[/quote] 基类加虚析构函数
mujiok2003 2014-08-29
  • 打赏
  • 举报
回复
//cout<<b<<endl();
cout<<b<<endl;
mujiok2003 2014-08-29
  • 打赏
  • 举报
回复
const B* b = reinterpret_cast<B const*>(a);

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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