小白发问,都说 C++开发效率比 Java 低,但 C++的 hello world 也没多几行代码啊

3 天前
wanmyj  wanmyj

#c++

#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

vs

#java

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}
5344 次点击
所在节点   程序员  程序员
60 条回复
crackidz
crackidz
3 天前
Java 也不是都嫌啰嗦吗...
zjsxwc
zjsxwc
3 天前
cpp 要各种自己造轮子,别人的轮子与自己的不兼容。

cpp 要自己管理内存,自己对内存释放负责。

cpp 没有反射,玩不了依赖注入容器,对于元编程更是痴心妄想。
Nosub
Nosub
3 天前
c++的包管理没有,这可以劝退 90%的程序员,之前你要用第三方库,比如 FFmpeg ,要自己编译,要自己编译就要学脚本语言 cmake ,学完你发现编译一堆 error ,你不是缺少头文件就是缺少依赖,你编译完 Windows 你以为完了,Linux 下又是别的问题,c++ 20 在改变这些,不过推进速度太慢了,世面上有一些第三方库管理工具,比如微软出的 vcpkg ,其实学习 c++,相当于你学了很多语言,c/c++/cmake 。
Nosub
Nosub
3 天前
当然最大的问题是跨平台,这也是 Linux 内核开发不愿意用 c++的原因,一点点开发上的便利,不足以取代 c 语言的优势。
codefun666
codefun666
3 天前
C/C++是 native 语言,性能当然暴打 JIT 语言。

指针、内存管理、依赖对于 C/C++开发者都不是问题。
tairan2006
tairan2006
3 天前
c++非常难用,到现在连个包管理都没有,std 聊胜于无,老登们又喜欢自己造轮子。语法复杂的一批,模板调试让人头秃,内存泄露和 segmentfault 让人欲哭无泪。
wanguorui123
wanguorui123
3 天前
主要还是生态问题,包管理,数据结构,Utils 库,Web 框架,部署便利性,还有异常处理,指针这些需要开发者的代码维护心智比较高
jones2000
jones2000
3 天前
@zjsxwc “反射”这些东西, 直接把函数地址换了就可以。c++有指针, 什么都可以搞。
0x676e67
0x676e67
3 天前
这种 old 问题还有什么讨论的必要。。。
zjsxwc
zjsxwc
3 天前
@jones2000
你对反射一无所知,不单单只是你理解的函数与指针这么简单,qt 为了能用基础的反射还不得不搞个 moc 预先编译,转换 cpp 代码,但高级的反射功能比如运行时获取对象的完整类型信息包括但不限于私有属性、面向切面编程、根据字符串来 eval 执行、泛型与反射的结合……,这些对于 cpp 来说都是无能为力的
wanmyj
wanmyj
3 天前
@Nosub C++也有 Conan 包管理呀
574402766
574402766
3 天前
打个不是很恰当的比方
去楼下便利店买瓶水 只用走的所以有没有车公共交通方不方便没什么影响
但是要去城市另一头办点事 有车没有车公交能不能直达体验差距就大了
v2exgo
v2exgo
3 天前
@0x676e67 我感觉是来骗铜币的,
securityCoding
securityCoding
3 天前
你拿 c++写个 crud 就知道好不好了
ppxppx
ppxppx
3 天前
主要看场景,没什么语言所有场景都很优秀。crud Java 更有效率;计算密集的高性能算法 c++实现起来更方便并且速度更快。
WorseIsBetter
3 天前
@cnbatch #19

有的时候还是需要考虑的。

硬盘的读写以 block 为单位,每个 block 的大小通常为 512 或 4096 字节。如果一次写入不能覆盖整个 block ,那操作系统只能先把整个 block 读出来,更新后再写回去。这带来了一定的额外开销。

文件系统的「对齐」保证了每个文件的数据和元数据的起始位置在 block boundary 上,这在一定程度上避免了这个问题。如果只是简单地将一些数据顺序地一次性写到文件里,那确实没必要考虑太多,只要确保缓冲区的大小是 block size 的倍数就行。

但如果有随机写入的需求(比如要实现一个存储引擎),自己手搓 buffer 逻辑并裸调 system call 的时候,就不得不考虑。不过这跟 C++ 就没什么关系了,换哪个语言都是一样的。
OBJECTION
3 天前
c++写起来本身就慢,外加 c++出了 crash 问题其实很难进行排查。特别是跨模块 组件之间的调用。 很多公司甚至部门之间都不相信别人的组件安全性。。

出了问题。。1/100 的概率 然后你去查吧。。 说不定还没 log 堆栈都不一定清楚
caqiko
3 天前
两个尖角括号 + 两个冒号 第一眼看着都感觉不好理解
xuanbg
3 天前
我同学写了一段 C 艹程序,内存溢出了。在他的代码里面,每个对象用完都释放了……但内存还是溢出了。光看代码没毛病,但是,架不住有一个对象它在释放的时候还在使用中,它释放不了啊。
Java 就基本不可能存在这种挑战认知的问题了。
xuanbg
3 天前
后来,我建议他还是别写 C 艹了,对象这玩意他把握不住。写 C 代码就好。。。于是,内存完全自主可控,从此就再也没有内存溢出了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1118729

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX