如果有其他高级语言的开发经验(c#, Java ),再去学 c++开发,那么要注意什么关键地方? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
tctc4869
V2EX    程序员

如果有其他高级语言的开发经验(c#, Java ),再去学 c++开发,那么要注意什么关键地方?

  •  
  •   tctc4869 2020-06-08 09:22:46 +08:00 2800 次点击
    这是一个创建于 2000 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如果有其他语言的开发经验( c#,Java ),再去学 c++开发,c++相对其他语言,那么要注意什么关键地方?。现在的 c++与以前的 c++有什么不一样的地方么?,对于 c++,我只听说过用它做开发,其中的内存管理会比 java 和 c#要麻烦,要手动管理内存,管理不好会发生内存泄露,手动管理内存也正是 c++的优点。除了这个还有其他的么?

    如果做 qt 应用的话,又要注意什么?

    15 条回复    2020-06-08 12:50:32 +08:00
    liuguangxuan
        1
    liuguangxuan  
       2020-06-08 09:35:29 +08:00 via Android   1
    珍爱生命,远离 C++。
    tctc4869
        2
    tctc4869  
    OP
       2020-06-08 09:36:44 +08:00
    @liuguangxuan c++很危险么?
    u823tg
        3
    u823tg  
       2020-06-08 09:37:03 +08:00   1
    感觉吧新特性太多,懒得学,c++11 止步我可以肯定看别人写的 c++ 很大几率看不懂。
    visonme
        4
    visonme  
       2020-06-08 09:47:08 +08:00
    内存管理+指针 (各种指针场景)
    其它就不是清楚了,大多数工作都在应用层,也是基于 QT,涉及的知识并不多,跟之前用 C#相比没有太大的区别。
    gramyang
        5
    gramyang  
       2020-06-08 09:48:13 +08:00
    我也是新手,学的不是 c++而是 rust 。
    需要自行处理栈内存分配和堆内存分配,堆内存的 gc,处理函数返回值的传递,函数参数值的所有权以及可变性,结构体域循环引用可能导致的内存泄漏(这里直接用裸指针写要方便的多),自行处理参数类型转换。
    暂时就想到这些。
    Tony042
        6
    Tony042  
       2020-06-08 09:59:19 +08:00
    @tctc4869 C++三年一标准,每个人常用的 C++特性估计都不一样,有人喜欢 oop,有人喜欢函数式,还有写模板的喜欢 SFINAE,就导致了#3 楼说的,看别人写的 C++大概率看不懂,11 14 17 20 每个版本又都加了很多新特性
    xuanbg
        7
    xuanbg  
       2020-06-08 10:05:34 +08:00
    其实没啥,就是别忘记释放内存就行了
    nightwitch
        8
    nightwitch  
       2020-06-08 10:15:59 +08:00
    如果你只写经典 C++并且比较克制的使用 C++新标准的部分特性, 再加上 Qt 完善的基础设施,可能手感和 Java/C#差不多。

    如果上面三条条件有一条做不到,难度会陡然上升。
    chucongqing
        9
    chucongqing  
       2020-06-08 10:26:38 +08:00
    内存释放,指针使用,还有各种宏各种 typedef,更别说模板了。让人头大,心智负担太重了。
    augustheart
        10
    augustheart  
       2020-06-08 10:35:46 +08:00 via Android
    没啥特别的,主要就是注意自己申请的资源问题。
    语法遇到的时候学一下也就是了。
    最大的问题可能是你从此需要更多的和底层打交道,以前你是用别人的框架,现在你要自己撸框架。到和底层打交道的时候随便哪块的内容都能抵上 c++几个标准库新增内容之和。
    augustheart
        11
    augustheart  
       2020-06-08 10:40:08 +08:00 via Android
    你以为学 java 的学 c#学 rust 的甚至学 python 的就真的都把语言特性吃透了?才怪,九成九的人也不过就是用几个框架而已。
    nicevar
        12
    nicevar  
       2020-06-08 10:43:42 +08:00
    最主要的就是内存释放, 以前开发的时候有 Java 的同事转过来的, 各种分配内存不释放, 头疼
    用 Qt 简单一点,Qt 自己能够维护内部对象, 不太需要你管
    paoqi2048
        13
    paoqi2048  
       2020-06-08 11:07:23 +08:00
    利用好 RAII,处理好智能指针的循环引用,就基本上不用担心内存泄漏问题
    across
        14
    across  
       2020-06-08 11:10:19 +08:00
    Java 和 C#深入过也知道内存模型了,其实就是这部分开放给你了
    其他什么奇形怪状的技巧,也不一定用得上,C++11 里面新概念多一点吧。
    cz5424
        15
    cz5424  
       2020-06-08 12:50:32 +08:00 via iPhone
    还是指针,内存分配释放问题比较多
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1511 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 41ms UTC 16:21 PVG 00:21 LAX 08:21 JFK 11:21
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86