java - Java View 中的 C++ : I must have missed a few things

标签 java c++ programming-languages

在此之前,让我先澄清一下,以下想法纯属个人观点,并且由于我的知识有限。我无意说 C++ 不酷。

我从事 C++ 编程已有一年多了,我认为它确实有一些很酷的功能。然而,我感到有点空虚和失望,因为从一个恰好以前学习过 Java(作为第一语言)的人的角度来看,我并没有真正从 C++ 中学到任何“改变思想”的东西。

根据我读过的许多帖子,人们更喜欢 C++,因为它更快。对于像我这样以前没有编写过时间关键型应用程序的程序员,我还没有机会欣赏这一点。

到目前为止,我所学的在我看来都是关于语法的。这就是我们用 Java 编写类的方法,下面是用 C++ 编写类的方法。这就是如何在 Java 中进行继承,这就是如何在 C++ 中进行等等。 (我知道,多重继承很酷,但对我来说,这不是一件改变思想的事情。我认为很酷的是能够回答为什么 Java 不/不能支持多重继承,这应该更通用比单一继承)。

不知何故,对我来说,所有这些都只是语法,到目前为止,在编写 C++ 代码后我的思维似乎并没有增长。我认为我的问题是用“Java 思维”编写 C++ 程序。正如许多人建议的那样,我真正想要的是在学习一门新语言后改变我的思维方式。我还没有用我的 C++ 做到这一点。

我还可以编写一些小型 Python 程序。然而,我害怕对我了解更多,再次重申,这只是学习一种新的语法,一种做事的新方法,只是不同的,不知道原因。

我打算学习 C 以真正了解事物。我认为这将是一种非常“涉及”的语言。

让我知道你的想法,请给我一些建议。

PS:顺便说一句,我想确认一个 C++ 中的特定问题。在 C++ 中,如果我是正确的话,以下列方式编写是不高效的:

    private A computeAndReturnA(){...} 

相反,将其写为:

private void computeAndReturnA(A& a){...}

与第一种方式一样,返回值被复制(当我们分配 b = compute...)并引入一些低效? (在 Java 中,我想第一种方式在含义上很明确并且效率还可以,因为它通过引用传递事物)

最佳答案

简而言之,你完全错了。事实上,与 Java 相比,C++ 提供了巨大的自由度。

例如,您可以在堆栈上分配类。 Java 不提供。您可以在编译时计算某些值。模板提供的功能远远超过泛型。你有能力使某事成为引用或值(value)。在 Java 中,所有这些选择都被剥夺了。就像,在 C++ 中,您可以扩展多个类。您不必被迫扩展 Object。如果需要,确定性资源清理。我可以一直说下去。

如果您所做的只是学习语法变体,那么完全有可能以某种可接受的方式使用 C++。但是,C++ 提供了许多您在 Java 中永远看不到的东西。

我猜,简单的事实是 Java 更像是 C++ 的一个子集,具有更大的标准库,外加反射和运行时代码生成。

我更喜欢 C++,因为坦率地说,Java 充满了任意限制。你知道为什么Java中没有“friend”语句吗?因为 James Gosling 认为这违背了他的原则。伟大的。棒极了。现在我需要将我的实现分成两个类,并且不得不假装它是两个单独封装的实现,因为十年前他认为这不是正确的做法。这是我个人的例子,说明了为什么 Java 如此糟糕 - 你按照 James Gosling 所说的你应该如何编程,而不是你想要如何编程,或者在很多情况下,你实际上应该如何编程。

另外,我看了你的PS。这就是 C++ 有合适的编译器的原因。事实上,几乎所有编译器都会为您将第一种形式转换为第二种形式,而您不想知道的其他一些令人费解的优化是在幕后完成的。

关于java - Java View 中的 C++ : I must have missed a few things,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3617080/

相关文章:

java - 如何解决org.hibernate.LazyInitializationException?

c++ - 关于#import 的简单问题

java - Java中使用PrintWriter需要关闭什么

java - base 64解码并写入doc文件

c++ - 有人有将 char 数组转换为 HEX 的代码吗?并返回实际结果?

c++ - CUDA block 级并行原语

swift - 为什么编程语言(例如 Swift)不使用最快的可用排序——桶排序?

language-agnostic - 编程中的术语 "Context"?

Java - PHP 的 URLConnection MySQL 的 $_GET 方法

c++ - 在 Visual Studio 2012 中设置内存断点