程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了java.lang.Object x = new Foo()的C ++等效项是什么?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决java.lang.Object x = new Foo()的C ++等效项是什么??

开发过程中遇到java.lang.Object x = new Foo()的C ++等效项是什么?的问题如何解决?下面主要结合日常开发的经验,给出你关于java.lang.Object x = new Foo()的C ++等效项是什么?的解决方法建议,希望对你解决java.lang.Object x = new Foo()的C ++等效项是什么?有所启发或帮助;

在C 中进行Java编程毫无意义。话虽如此,我将从尝试尽可能模仿陈述的赋值特征和精神的角度来探讨这一问题。我建议的每种方式都有缺点和局限性。前两个不是真正的惯用C ++,但是了解它们很重要,以了解后两个解决了哪些问题。

让我从最基本,最有用的空指针开始:

voID* foo = new Foo();

可以从new运算符将任何东西分配给voID指针,因为new,placement new等总是返回voID指针。缺点应该是显而易见的:丢失有关所指向对象的类型信息。首先,C ++缺少反射或任何查询对象的方法。您必须将类型信息放在脑海中,并使用来回转换来实际使用它。由于没有任何类型安全的方法可以从voID指针进行强制转换,因此可能会引起欢喜。

如果这是函数的返回类型:

voID* foo = some_function( _arg0 );

使用您的代码的任何作者都需要弄清楚 应该 怎么做。不幸的是,通常情况下它们应该发生什么,而您(作者)认为应该从函数返回的结果却大不相同。

如果你想自己限制其支持的,而不是无限类型java.lang.Object中可以处理则有N种类型的工会。只要它们是POD数据类型,它们就可以 在同一存储空间上保存一组预定义的值类型。工会缺乏两个非常重要的事情:知道分配哪个值的能力和持有非POD类型的能力。这将它们完全排除在具有任何功能(例如)的任何对象中std::string

为了澄清以上内容的实际含义:

union myType{
    int a;
    char b[4];
};

如果我在“ myType”的实例的“ b”部分中设置了第一个字符,那么我还将int的第一个字节设置为相同的值。在C 。

现在,如果您真正想要“我可以拿任何东西”,请使用Boost :: Any。这可以容纳任何对象而不会破坏很多有用的类型信息。Boost文件的目的比我要好。取自Any的简介部分:

可以考虑解决与空指针相关的许多问题,例如丢失有关所包含对象的信息以及安全地转换为正确类型的能力。

Boost :: Variant解决了与union相同类型的问题,而不会丢失对象信息。此外,它可以与非POD类型的对象一起使用。如文档所述,最好:

编辑:

重新整理以显示我回答OP时的想法和原因。我也在下面谈到了评论。

解决方法

C ++等于java.lang.Object x = new Foo()什么?

大佬总结

以上是大佬教程为你收集整理的java.lang.Object x = new Foo()的C ++等效项是什么?全部内容,希望文章能够帮你解决java.lang.Object x = new Foo()的C ++等效项是什么?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: