从 Java 转向 c++

2022-09-03 00:36:17

在过去的3年里,我一直在开发基于C#(.net)和Java(J2EE)的应用程序。

但现在我觉得,Java,C#让你跛脚(从学习的角度来看),你可以快速开发你的应用程序,但你无法理解编程的基本基本概念。

所以,我试图学习C++,但是由于指针,多重继承,一些约定和其他C++概念,我发现它有点“令人困惑”,这些概念在Java中并不存在。那么,你们有什么建议呢?我应该如何看待它?

谢谢

PS:我是一名学生,所以一直待在世界上,实际上在转变。


答案 1

在我看来,你应该先学习C,以便正确理解C++的基础。拿起Kernighan和Ritchie的“C编程语言”的副本,被广泛认为是该语言的最佳参考,并开始阅读它。一旦你完全理解了C,你就会拥有你需要的低级基础。


答案 2

C++并不比任何其他现代编程语言更“基本和基础”。它有一个计算机模型(平面内存地址空间),但操作系统和CPU仅使用多层缓存和分页来模拟该模型,因此它不是“真实的”。结果是,同一操作有时可能需要比其他时间长 1000 倍才能完成。

此外,现代C++有许多强大的抽象,与计算机的工作方式没有比Java和C#中提供的抽象更直接的关系。OP提到了多重继承 - 显然并不比其他OO语言中的继承更重要。Java中省略的C++的许多其他功能是高级抽象(或允许您构建它们),因此在某些方面Java是更低级的语言。在Java中,运算符符号的含义始终相同,而在C++中,简单可能会构建一个对象,该对象稍后将用于生成SQL表达式,而不是在进程内执行。==

JVM和CLR运行时(几乎可以肯定)是用C和/或C++编写的,所以从这个意义上说,显然它们今天恰好形成了层。但是在C/C++层,你仍然会在一个不是“机器真正如何工作”的抽象中工作,所以你真的只是学习一组不同的抽象,而不是“现实”。操作系统(或者硬件芯片)可以专门设计,以便JVM或CLR(如运行时)是系统的本机低级层;在这样的系统上,C/C++运行时需要一个“高级”(昂贵)仿真层才能工作。

因此,可能不值得尝试学习如何在“现实”中编程。如今,没有人真正这样做。这是浪费时间。您最好了解编程抽象如何帮助您编写正确的程序。如果一种语言让你的生活变得困难,那并不能证明你正在做“真实的事情”。这只是意味着你为你想做的事情选择了错误的语言。


推荐