Objective c 目标C中的安全铸造

Objective c 目标C中的安全铸造,objective-c,Objective C,Objective-C中有类似C++的安全强制转换吗 我知道它们是在目标C++中,但我不确定可能的副作用。使用目标C++可能会缩短编译时间-有没有其他原因不使用它? 你认为C++的哪一个特性将帮助你将一个64位的长< /C> >到32位 int < /> >? > p>你可以打开编译器标志来警告你在这样的情况下。这个特殊的错误会被-WIFE标志捕获。 < P> ObjuleC有C++安全的转换。或者,我们可以使用运行时反射: id myOb=[someObject getObject]; NSA

Objective-C中有类似C++的安全强制转换吗


我知道它们是在目标C++中,但我不确定可能的副作用。使用目标C++可能会缩短编译时间-有没有其他原因不使用它?

你认为C++的哪一个特性将帮助你将一个64位的<代码>长< /C> >到32位<代码> int < /> >? > p>你可以打开编译器标志来警告你在这样的情况下。这个特殊的错误会被-WIFE标志捕获。

< P> ObjuleC有C++安全的转换。或者,我们可以使用运行时反射:

id myOb=[someObject getObject];
NSAssert([myOb isKindOfClass:[MyClass class]], @"Return value is not of type MyClass as expected.");
MyClass * newOb= (MyClass *)myOb;
参考资料:


错误是什么,演员是什么?如果强制转换将对象强制转换为不同的类型(即从
id
NSString*
),如果有多个具有不同签名的选择器,则可能会影响编译器选择要使用的选择器的方式。在这种情况下,不能使用
动态强制转换(目标不是指向类的指针或引用)。改为使用
static\u cast
。@KennyTM:谢谢,现在修复了它。在许多编译器实现中,
long
是32位的,甚至在64位目标上。而
long
是64位的。在unix或OS X中不是这样。编译器应该给你一个很好的警告。这应该是一个注释,而不是答案。铸造是一个错误-我相信我会收到警告如果我使用C++ CasyU将得到警告当你尝试分配一个64位长到32位int。你使用静态铸造准确地摆脱了警告。通过使用静态强制转换,您告诉编译器您知道自己在做什么。不管你使用普通的C++编译器还是C++ STATICECAST,结果都是一样的。不管怎样,如果问安全铸件的动机是错误的,问题仍然是一个我想回答的问题,WSCOND似乎忽略了错误,并提出了很多错误的错误,而对MyClass *的ID MyObjr是多余的。IDS可以自由地分配给任何对象类型的变量。“Objtovi-C确实有C++安全的强制转换”。什么意思?e、 g.动态_演员阵容?它不编译。谢谢