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

1 天前
 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!");
    }
}
3431 次点击
所在节点    程序员
49 条回复
flyqie
1 天前
你不能只看 hello world 啊。。

得从实际业务中体会啊。
stimw
1 天前
口算 1+1 确实比按计算器快
wanmyj
1 天前
@flyqie 能简单说一下吗,c++不是也有包/library 拿来直接用的吗
murmurkerman
1 天前
效率在堆内存管理和并发编程上体现,java 是自动管理内存,c++要手动管理,智能指针之类的会限制一些写法。多线程也比较麻烦,没有官方线程池,协程。
midasfree
1 天前
@wanmyj 1. 认识的 c 系的程序员一般都不太会直接使用开源的库, 而是参考开源自己造轮子; 2. 没有垃圾回收会导致业务对大块内存的处理逻辑变得复杂.
abcdxe2v
1 天前
@wanmyj “也有包/library” 是也有,但是在某些领域比如说后端,可能不完善、功能少、bug 多、文档少。
ty29022
1 天前
对比一下 grpc 的 demo
用 c++的完成队列和 java 的实现比较一下 很直观
inhzus
1 天前
都写个学生管理系统试试就知道了
ugpu
1 天前
直接点说法:
1. java 大量开元包导入直接用, 安全 稳定 无脑.
2. cpp ?导入进去一套用法下来 还能出问题, 简单点就是说:照着说明书用都能出问题;人的问题占大比; 毕竟那点工资招聘一个真正会 cpp 的不大可能;

效率说的是 成本 & 维护 & 招聘人员。 不是说开发效率. 管理层懂点技术的会知道 公司是有钱不是傻,要的就是可复用性; 这个可复用包括人的复用; 不是 a 走了疯狂找个 b ,b 又不愿意吃屎山代码.
java go c# 都是那几个框架 不会也愿意学; cpp...你说招进来让他们学框架二次迭代开发维护, 他们只想造轮子. 给你推翻重写, 毕竟底子在那.
ugpu
1 天前
@ugpu 另外 市面上的都是杂牌程序员, 我也是; 喷的铁铁们别激动;
正规军是什么: 科班出生 正儿八经学习了 操作系统 数据结构 努力点在刷刷 leetcode. 以及良好的数学底子,这种人很会写代码 但是也不甘心写代码;
都用上杂牌军了,还用什么 cpp 那玩意, 半天喷不出一个屁, 老板哪里管什么效率,只知道出了点 到点要看到,别出岔子; 那不出岔子 就要稳定的库代码引用; 那就 java go c# 咯。反正全球那么多地方用过了 有问题都有问题;
tuimaochang
1 天前
"开发效率高"是个项目完成后的最终评价,决定它的因素不仅限于开发语言的易写、啰嗦程度,还有更多因素比如:是否具有大量第三方高质量开源包避免重复造低质量轮子;在协作时开发框架是否能限制、显著减少引发崩溃的垃圾代码;等。
lc1450
1 天前
ugpu
1 天前
大晚上在唠嗑几句, 只是个人观点.
1: 为什么说 c++ 难,难的不是语法糖; 而是语法糖背后的意义;
file.open("file_name", a). & file.open("file_name", a+) & 写文件要 4k 对齐 为什么要 4k 对齐 因为内存 为什么内存是 4k ?那就要设计到操作系统 & 特么的在去溯源, 都特么溯源到 第一台计算机的产生了;
用 java go c# ?我管你几 k 对齐, 快速我就 github 下载 广泛推广使用;

反正老板不听历史, 所以 也别纠结学什么语言了 你需要的是一个思维 而不是学习语言; 这个思维是:
我目前做的项目 & 业务。 计算机 & 代码可以给我提供我什么帮助 让我更好的完成✅

而不是:
我要学会什么语言 这个语言什么好处 能做什么。

为什么会有这样的思维, 这是 西方国家 & 部分亚洲国家的差别;
于当代科技而言, 西方在 0-1 的节点上作出的贡献占比很大很大
亚洲地区 在 1-x 上实现的更多。
至于你说哪个牛逼你说了算。 你非要我说 我说工人阶级最伟大.
nectar33
1 天前
实际的业务可不是 hello world 这种复杂度, 复杂度高了之后差别就很大了
neoblackcap
1 天前
Java 自带的 string 是可用,C++标准库的 string 就是聊胜于无。
而工作中字符串操作太多了。
ShadowPower
1 天前
C++每个第三方库都有自己的字符串实现
你可能会见到:
QString
CString
……
agagega
1 天前
1. C++没有 GC
2. C++编译模型比较原始
3. C++构建会涉及大量依赖库、编译选项和目标平台 ABI 的细节,极容易踩坑
4. C++本身的语义就比 (一般的) Java 程序复杂,模版之类要考虑的很多,心智负担大
5. C++适用的场景,代码本来就要比 Java 更谨慎
cheng6563
1 天前
给你段 Windows C++ 窗口开发的“hello world”,你再看看。


#include <windows.h>

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow) {
// 注册窗口类
WNDCLASS wc = {0};
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = L"MyWindowClass";
RegisterClass(&wc);

// 创建窗口
HWND hwnd = CreateWindow(
L"MyWindowClass", L"Sample Window", WS_OVERLAPPEDWINDOW,
0, 0, 800, 600, NULL, NULL, hInstance, NULL
);

if (hwnd == NULL) return 0;

// 显示窗口
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);

// 消息循环
MSG msg = {0};
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return 0;
}
cnbatch
1 天前
@ugpu 写文件 4K 对齐?对于调用标准库 fopen 、std::iostream 而言,并没有这种事。标准库的文件读写并没有 4K 对齐这种选项。
大概是想说现代硬盘的 4K 对齐吧?那是操作系统和文件系统的事情。调用标准库文件读写 API 的时候,操作系统已经帮调用者处理好背后的对齐了,调用者并不需要考虑硬盘“4K”对齐这种事。如果分区没做 4K 对齐,开发者想要干预也没法干预。
mayli
1 天前
@cnbatch 明显是真菜,或者是故意 troll ,综合看发言前者概率比较大。大概是出租车司机水平指点程序员。。。

开发效率除了代码行数还有复杂度,简单说,c++需要显式内存管理,java 就直接 gc ,省去了最难的一部分。
你可以理解为 c++程序员一直在手动 gc ,java 程序员可以把这部分精力放在其他地方,或者聘用 java 程序员的时候,可以选择能力差一些的。

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

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

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

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

© 2021 V2EX