V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
liangkang1436
V2EX  ›  程序员

Java 开发开始学习 C++开发的一点体会

  •  
  •   liangkang1436 · 95 天前 · 2708 次点击
    这是一个创建于 95 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • Java 不愧是 C++的替代品,学习 C++的过程中很多概念都能在 Java 中找到对应,比如模板对应 Java 的泛型,虚函数对应运行时重载,但是因为 C++更底层,所以学习 C++中的这些概念,反而更容易理解。

    • C++ 的语法,确实比较复杂,至少比 Java 复杂,每次查找 cppReference 总能看到自己不懂的语法,而且语法 C++的语法简洁,表现力很强,Java 与之相比,确实啰嗦。

    • C++ 的标准库确实更加的抽象和简洁,提供的方法基本上真的只提供了最基本的最核心的部分,想要直接拿来实现自己的需求有点难,自己总是还得写点代码,而 Java 的 JDK 就提供了很多的开箱即用的方法。

    其实最大的体会就是,写 C++代码,思维方式跟写 Java 代码差别很大,C++强迫我以更底层的视角去开发,关注内存是引用和内存复制,关注指针指向的是变量还是另一个指针,而 Java 因为为开发者屏蔽了这些底层细节,所以写起来很快很轻松,直接实现业务即可。

    14 条回复    2025-05-04 12:24:32 +08:00
    hwdq0012
        1
    hwdq0012  
       95 天前 via iPhone
    cpp 有两套语言 模板元编程在编译期几乎图灵完备 ,但语法很怪 java 假泛型类型擦除 连 c# 真泛型都比不上 和 c++编译器都能区分的泛型就差得更多了
    liangkang1436
        2
    liangkang1436  
    OP
       95 天前 via Android
    @hwdq0012 是的,所以我学 Java 泛型的时候,老觉得很别扭
    anivie
        3
    anivie  
       95 天前
    > Java 不愧是 C++的替代品

    这是哪个次元的说法……
    xtreme1
        4
    xtreme1  
       95 天前
    「所以学习 C++中的这些概念,反而更容易理解」
    「比如模板对应 Java 的泛型」
    我不觉得你理解了
    PTLin
        5
    PTLin  
       95 天前
    学新语言千万不要去找与你会的语言之间的对应关系。找到对应关系下一步就你就该用以前的范式代入新语言的程序开发中了。
    例如 python 中写 getter/setter ,go 中把 err 转换成 panic 然后配合 recover 实现 try catch 。
    liangkang1436
        6
    liangkang1436  
    OP
       95 天前 via Android
    @anivie 替代品确实不准确,应该 Java 是参照 c++设计并简化后的产物
    liangkang1436
        7
    liangkang1436  
    OP
       95 天前 via Android   ❤️ 1
    @xtreme1 才刚学,说错了很正常,:-D
    prosgtsr
        8
    prosgtsr  
       95 天前
    厉害了,长期写一种语言,学第二种的时候感觉太痛苦了,直接放弃了,我是废物
    emSaVya
        9
    emSaVya  
       95 天前
    @liangkang1436

    c11 设计线程模型的时候是参考了 java 的 包括 std format 这种基本就是全套使用了。所以不存在谁替代谁

    不过 java 确实是个不讨喜的语言 写了这么多年代码 最讨厌写 java
    onikage
        10
    onikage  
       94 天前 via iPhone
    同 java 学 c++,同感。
    arielherself
        11
    arielherself  
       94 天前
    很赞同最后那段总结。对于第三点 C++ 标准库不够丰富的问题,可以试试 [boost]( https://www.boost.org/),它是一套非常成熟和丰富的 C++ 库,被各种大型项目广泛使用。
    henix
        12
    henix  
       94 天前
    个人也学过这两种语言,感觉除了你说的这些,还有一个代码组织上的重要区别:
    C++ 有编译单元( translation unit )的概念,每个 C++ 源文件跟其他 C++ 源文件之间存在隔离(比如 static 函数是属于单个编译单元私有的),因为每个 C++ 源文件都是单独编译成目标文件的
    而 Java 只是将各种类组织成 package ,通过 private / public 关键字控制访问,但实际上即使是私有方法也可以通过反射访问,没有编译单元的概念
    liangkang1436
        13
    liangkang1436  
    OP
       94 天前 via Android
    @henix 这个我还真没注意,感谢大佬不吝赐教,
    CLMan
        14
    CLMan  
       94 天前
    @PTLin 这种说法我不太认同,人学习东西本来就是基于已有的经验,然后总结相同,区分不同,这是是人的硬件条件(大脑)决定的。
    你说的,python 写 getter/setter,go 中写 try catch ,是简单的生搬硬套,意味学习者并没有正确的去对照学习新语言。

    在学习新的编程语言时,对比已经学会的语言,语法可以从两方面进行比较:

    - 语法的外形上,对于形式上类似的语法,对比它们在细节、功能性上的不同
    - 语法的功能上,对于作用上类似的语法(上通常不同,如 try catch 对比 return err ),对比它们在设计理念、功能性上的不同

    如果学习者会正确的对语言进行比较学习,他会带着“相同”与“不同”的好奇去研究新语言的语法,而非简单的生搬硬套。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5511 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 06:30 · PVG 14:30 · LAX 23:30 · JFK 02:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.