gpt4 book ai didi

c++ - 可以为 CString 返回堆栈对象吗?为什么/GR 会导致 dynamic_cast 出现未定义的行为?

转载 作者:行者123 更新时间:2023-11-28 07:59:31 24 4
gpt4 key购买 nike

我有多态类,我想通过 dynamic_cast<B>(A) 转换对象尽管使用编译器优化/GR 我收到一条消息,它可能会导致未定义的行为。我正在使用 static_cast相反,但它不执行运行时检查并且对我的类(class)不安全。返回堆栈也是有效的 CString来自类的对象?

CString CKingdomWar::GetTeamName( eUserTeam eTeam )
{
if( eTeam == ELDAR )
return CString( "Eldar" );
else if( eTeam == ELWYN )
return CString( "Elwyn" );
else if( eTeam == NORGNAGON )
return CString( "Norgnagon" );

return CString( " " );
}

最佳答案

如前所述,您的 CString 是按值返回的,这不是问题。

关于静态/动态转换,您应该显示给出警告的具体代码。如果您使用 dynamic_cast,您通常不会收到此类警告。正确(即在兼容类型之间转换指针或引用)。

如果dynamic_cast<B>(A)是工作,那么 A 和 B 都应该是同一继承树中对象的指针或引用。例如,如果您有:

class A {
// ...
};

class B : public A {
// ...
};

A* inst = new B;

然后dynamic_cast<B*>(inst)没关系。同样处理引用。如果inst不是B类型那么指针版本会返回NULL,或者引用版本会抛出异常。

但是,您不能这样做:

A inst;
B nonono = dynamic_cast<B>(inst);

关于c++ - 可以为 CString 返回堆栈对象吗?为什么/GR 会导致 dynamic_cast 出现未定义的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11874006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com