
1 linxy 2015-07-11 12:44:55 +08:00 C++包括 1,面向对象 (virtual继承 shared_ptr之类的 2, 模板 然而还分为type rich programming 和meta programming 还有Loki这种东西… 3,函数式 如今有lambda ,也能玩出花来 4,过程式。 感觉每一个都可以学可两三年吧。 |
2 Mirana 2015-07-11 12:55:19 +08:00 光看书就会做菜的话,我早成大厨了 |
3 jsyangwenjie 2015-07-11 12:58:19 +08:00 到你用到的时候你就知道为什么C++难学饿了 |
4 msg7086 2015-07-11 12:58:44 +08:00 光一个模板就能干死你。 概念当然都不难。一个编程语言还能有哪些概念……一个语言里实现的东西大都会散播到其他语言上去。 就说函数式风格编程,lambda表达式这些比较新的概念,c++最近也已经支持了。更不用说泛型&模板这些东西了。 然而你并不能都用好。 |
5 typcn 2015-07-11 13:04:47 +08:00 并不难,是半吊子太多了(虽然我也是? |
6 lilydjwg 2015-07-11 13:11:11 +08:00 我也是学了 Python 之后才学得下 C++ 的,虽然并没有深入。 C++ 对于我有如下已知点我还不了解: * boost * shared_ptr, unique_ptr, .... * copy constructor, move constructor, ... * 各种位置的 const、const_cast、mutable.... * .... |
7 wizardoz 2015-07-11 13:11:20 +08:00 难不是难在可以用它来开发项目,而是它具有的纷繁复杂的特性。如果在一个C++的团队里面开发的话你会发现各种人写出各种各样的代码。 当然如果是一个Java程序员来用C++的话,完全可以摒弃C++一些特性,像用Java一样使用C++。 我作为C程序员,可以摒弃更多的东西,当作C来使用。 |
8 lilydjwg 2015-07-11 13:13:05 +08:00 有 C 和 Python 基础之后随便看看教程,写点 C++ 小程序当然没问题,毕竟现在你可以把它当成是「带类的 C」。 |
9 bbdump 2015-07-11 13:15:03 +08:00 试试模版 各种隐式转换 虚指针 多态...这些东西没这么简单就能掌握 |
10 wizardoz 2015-07-11 13:16:33 +08:00 当然我觉得Python也挺难的,刚开始也觉得很简单。第一次接触Python,看了一下午《How to think like a computer scientist》就开始写程序了。但是后来真正想深入了解的时候,发现Python其实也没那么简单,好多概念还是不太容易理解。 |
11 birdor 2015-07-11 13:18:47 +08:00 如果能从无到有写一个 StringVector,支持所有 std::vector<string> 的接口,性能也不逊色,而且实现的过程中不用互联网,只参考 C++ 的基础文档,那就入门成功了。 |
12 est 2015-07-11 13:32:08 +08:00 觉得简单的,加上一个多线程就直接跪了。 |
13 billwsy 2015-07-11 13:33:25 +08:00 via iPhone 我觉得Python才难学,最近写的要疯了… |
15 Clarencep 2015-07-11 15:15:30 +08:00 一千个人眼中有一千个C++。 还曾见过一个团队的C++只用不准用new只准malloc,写class只准用静态函数,不准用std的库,boost库也不用,哎~活脱脱就是那C++当C用... |
16 womaomao 2015-07-11 15:16:49 +08:00 题主能否说出C++对象的内存模型,虚函数怎么实现多态的? |
17 Ncer 2015-07-11 16:00:52 +08:00 当成带类的C来看当然不难 |
18 endrollex 2015-07-11 16:05:04 +08:00 C++不难,就是光C++只能撸黑屏,玩不了最流行的Web |
19 KDr2 2015-07-11 16:07:21 +08:00 |
20 realityone 2015-07-11 16:10:40 +08:00 |
21 fo2w 2015-07-11 16:13:03 +08:00 talk is cheap, show me the code |
22 ilotuo 2015-07-11 16:19:40 +08:00 via Android 找个好工程 如android的binder机制实现原理 里面的虚函数跳来跳去 对虚函数表没个概念你根本看不懂 |
23 yahoo21cn 2015-07-11 16:26:31 +08:00 现在都面向搜索引擎编程了,用什么语言都一样 |
24 ChangxuBlack 2015-07-11 16:33:50 +08:00 模板元编程在Python里有什么对应? |
25 nozama 2015-07-11 19:30:35 +08:00 via Android cxx的精髓在于RAII |
27 znoodl 2015-07-11 20:07:40 +08:00 把东西写出来很简单,但是要能稳定运行,要各种安全检查有很多事要做呢 |
28 mozartgho 2015-07-11 22:31:26 +08:00 楼主给大家讲讲虚继承时,对象模型建立过程吧! |
29 leavic 2015-07-11 22:34:33 +08:00 我用C++就是当做有类的C来用,那是相当容易,分分钟让我觉得我用C的结构体都可以创造出C++了。 |
30 chaucerling 2015-07-11 22:49:29 +08:00 只是会了 c with class 而已 |
31 realpg PRO 个人觉得,你学会使用它并不难 你用它去实现90%的应用需求也都很简单 但是,这是一个可以翻出各种花样的语言 你不可能一辈子不跟别人合作开发 你不可能一辈子不用别人的轮子 你也不可能让别人不玩出花样 要跟各种花样的代码去合作整合时候 看了他们的代码我怎么觉得自己什么都不会。 |
32 kevinyoung OP @linxy 正好在隔壁知乎看轮大的答案,怎么跟你说的一模一样啊。 这几项确实每一样都够看个几年的,但其实有很多东西都是语言无关的,比如面向对象或者函数式的思想都可以抽出来考量,也可以在其他语言下学习,所以都算作c++的范畴我觉得有点不公平。 |
33 kevinyoung OP @Mirana 所以要使劲儿造轮子啊 |
34 kevinyoung OP @jsyangwenjie 肯定是这样的。不过正经写项目的话还有一层复杂度在架构设计上,我觉得这也不能算是c++难吧。 另外一般写项目应该会把使用到的特性限定在一个范围内,所以没有人敢说自己精通c++但不妨碍拿一个子集来写有用的项目吧。 |
35 linxy 2015-07-12 00:22:04 +08:00 via Android @kevinyoung 因为刚好看到他答案,参考一下喽~ |
36 kevinyoung OP @msg7086 嗯,模板确实还没来得及看,不过我理解模板的作用一个是实现动态语言比如多态这样的特性,一个是提供一个比c的macro更健康的元编程途径。 用纯c做这些事情的话怎么看都是在hack,c++虽然试图提供一个更好的法子,但用起来肯定不可能舒服了。 |
37 kevinyoung OP @typcn 哈哈 |
38 kevinyoung OP @lilydjwg 感觉c++这些边边角角的地方确实多,一开始我都跳过去了,回头有时间再慢慢磨吧.. |
39 kevinyoung OP @wizardoz 团队协作的话我记得有人提过他们连编码风格都要统一一下的,所以难道不应该对大家用到的特性做一个约束吗? |
40 kevinyoung OP @lilydjwg 不知道为什么大家都爱那这句说事儿。 我看c++就是因为用c写面向对象太蛋疼了,还要每次实现一些标准库里应该有的东西。所以至少现在c++对我来说就是带类还有标准库的c,so what?我觉得很好用,能解决我的问题,这不就够了?学语言又不是为了装... |
41 kevinyoung OP @wizardoz 嗯,Python确实包罗万象,我其实花了一两年在看Python,甚至还看了Python的源码,结果涨的是c的功力.. |
42 kevinyoung OP @est 多线程/进程 模型是独立于语言之外的概念吧,把这个也算在c++的复杂度里我觉得不公平。 |
43 kevinyoung OP @billwsy 我觉得你可能不是觉得Python难学,而是实际写项目的时候动态语言的特性会出一些很奇怪的问题.. |
44 linxy 2015-07-12 00:37:55 +08:00 via Android 其实可以看看Rust |
45 kevinyoung OP @Clarencep 我觉得这样或许有道理,如果没法保证团队的人都能用c++的特性写出质量足够的代码的话,那么不如限制的死一点当c用好了,这样至少保证写出的项目的质量。 |
46 kevinyoung OP |
47 tencoldays 2015-07-12 00:42:52 +08:00 屎难吃,并不代表吃屎是种伟大的能力。 |
48 kevinyoung OP @womaomao 嗯,一个猜想,不一定对。 |
49 kevinyoung OP @Ncer 见附言。 |
50 kevinyoung OP |
51 kevinyoung OP @fo2w 呃,被你将军了,确实没什么拿得出手的code... |
52 kevinyoung OP @ilotuo 等下,android的应用不是用java写的? |
53 kevinyoung OP @ChangxuBlack Python的class可以用type函数在运行时生成,至于个中attributes和methods也可以在运行时绑定,不知道这是不是你要的? |
54 kevinyoung OP @znoodl bingo。但代码健壮性的部分总也不能算作是c++的内容吧? |
55 kevinyoung OP @mozartgho 还没来得及看,随后看了以后如果有机会我就写一个帖子。 |
56 kevinyoung OP @leavic 确实。只有面向对象部分的话不难。 |
57 kevinyoung OP @chaucerling 见附言。 |
58 msg7086 2015-07-12 01:05:54 +08:00 via Android 插一句。其实多条回复可以放在一层楼的… |
59 JeffreyLau 2015-07-12 01:07:38 +08:00 via Android 回复楼主那个统一回复:虽然我没写过大项目,但是我觉得c+class就能搞定的项目算不上是项目,顶多算教材课后题吧 |
60 kevinyoung OP @msg7086 是同时@多人吗? |
61 kevinyoung OP |
62 ChangxuBlack 2015-07-12 01:12:32 +08:00 @kevinyoung 不是,这个和模板元编程不一样。。。模板元编程可以在编译时期完成类型推导乃至数值计算,以提升程序执行效率。。。模板元编程博大精深,最经典的应用是eigen和boost。。。目前没有其他语言有C++这么强大的模板元编程吧? |
63 ChangxuBlack 2015-07-12 01:14:03 +08:00 @typcn boost的spirit和mpl你觉得如何呢? |
64 ChangxuBlack 2015-07-12 01:17:20 +08:00 @kevinyoung 模板的作用更多的体现在编译,而不是执行。。。可以看看《C++ Templates》 |
65 rcmerci 2015-07-12 01:18:22 +08:00 lz去看看modern c++ design这本书试试把。 |
66 msg7086 2015-07-12 01:20:57 +08:00 |
67 kevinyoung OP @ChangxuBlack 我明白你的意思。模板元编程无非就是为了让c++这种静态语言也具备多态以及元编程能力,只不过到底还是静态语言,所以很多工作要在编译期完成,但不管怎么样写起来和动态语言很像了目的就达到了。 |
68 kevinyoung OP @rcmerci 书单一大堆,但这两年都不确定有时间看了...毕竟主业还是看论文发论文....但还是谢谢 |
69 sinxccc 2015-07-12 01:30:12 +08:00 @JeffreyLau 以语言论项目大小是个很没意义的事儿。 |
70 ChangxuBlack 2015-07-12 01:30:13 +08:00 |
71 kevinyoung OP @ChangxuBlack 受教了。这样提前就算好的做法确实跟作弊一般,嘿嘿。 |
72 ncwhale 2015-07-12 04:58:52 +08:00 via Android @endrollex 什么鬼喵…我这里早就C++做基础可以跑Webkit做界面再底层HTTP Push各种视频音频照片控制机器人了喵…说不能的是等着脸肿喵? |
73 loading 2015-07-12 06:39:31 +08:00 via Android 难是相对的,你也说了要记的东西多了,用起来就更复杂了,只有到真正用到的特性时,你才会明白的,光看语法那是小学生。 |
74 7wN5407klUw768m0 2015-07-12 07:39:09 +08:00 @msg7086 就跟python没有函数式编程似得,好像支持的比C++还早还好吧 |
  75 linux40 2015-07-12 07:51:06 +08:00 via Android auto和static都不同 |
76 linux40 2015-07-12 07:52:03 +08:00 via Android 表达式也不同 |
77 linux40 2015-07-12 07:53:14 +08:00 via Android 数组也不同。。。 |
78 msg7086 2015-07-12 08:44:12 +08:00 @Taojun0714 我就是拿python的函数式和lambda举例子的啊? 我说现在连C++也开始支持了,有什么问题么…… |
79 lijianying10 2015-07-12 09:14:26 +08:00 其实楼主想多了。 问题不在语言上,你没有实际业务来考量两个语言当然是从语法上啊。 当你处理高并发环境下的TCP连接问题时。眼看着连接服务器就要扛不住了的时候。 当你处理信号,大规模加密解密,视频,图形,矩阵,(Intel IPP 可针对CPU型号优化,虽然有SciPY依然酸爽) 当你处理HTTP业务时。C++就会变得很酸爽。 当你做数据可视化的时候(Python各种方案,各种方便各种爽,但是C++我只了解Cern ROOT晦涩难懂) 当你了解ICPC的时候,当你知道MIC这种性能怪物的时候。 这两种语言的区别就是各花入各眼了。 不必纠结,多做了解,多跟实战工程师聊聊Case你就不会这么纠结了。 比如说银行用的TCP连接是怎么做的技术细节这些,别人集群都干什么了。 海尔等这种大公司的企业级应用是中心化的还是分布式的?怎么处理的? 接触语言时千万不要忘记业务。 希望能帮到楼主,祝楼主武运昌盛。 |
80 benjiam 2015-07-12 09:38:38 +08:00 via iPad 可以去看effect 系列,了解各种坑 |
81 sgissb1 2015-07-12 10:35:10 +08:00 这个某种语言当初设计时候的分工有关 就像汇编一样,概念多简单。但写个东西试试。谁用就觉得烧脑子。 c和c++的设计,当时就是为了解决让人类能“看懂”的分工设计的。 在c/c++之前还有很多语言,都是由于种种原因用途很有针对性。 c/c++这类已经算比较偏底层(没有汇编那么底层),用起来才真能感受到难。 你觉得学的容易,用起来容易。而是你把他当作python这类解决实际的一些工程问题的语言去对待了。 |
82 lilydjwg 2015-07-12 12:40:39 +08:00 @kevinyoung 「带类的 C」么?这是 C++ 原本的设计目的啊。没见过也不知道别人都拿这句话做什么了,反正我觉得初学者把 C++ 当成带类的 C 挺好的。随着使用的深入会渐渐遇到各种 C++ 的特性,到时候学习就可以了。当然不可能一直这么做,因为现在的 C++ 早已不是以前了。 |
83 lincanbin 2015-07-12 13:31:24 +08:00 via Android 编译型语言的面向对象没有解释型的用起来爽,有时候追加个方法什么的。 |
84 oska874 2015-07-12 14:00:30 +08:00 看了附言,感觉题主只需要用到c++ 很少的一部分,所以觉得c++ 不难,那是你没有用到C++ 的精髓,只是当作超C 在用,当然觉得没啥了,但是你一旦深入了,就会发现到处都是坑。 C 也一样,语法超简单,但是用起来不简单,真正用到工程里面了会出现各种不可遇到的问题需要你去解决。 不恰当的比喻,好比给了一把菜刀,你只用来切豆腐当然觉得很切菜很简单了,但是让你用去雕萝卜,呵呵。 |
85 ChangxuBlack 2015-07-12 15:08:28 +08:00 @kevinyoung eigen就是靠模板元编程获得了变态级别的效率(BLAS库里数一数二快的了),boost的MPL非常难学。。。BOOST还有个东西叫spirit,靠模板元编程生成针对领域特定语言的编译器,这个最酷了,详见http://boost-spirit.com/home/ |
86 kamushin 2015-07-13 01:35:27 +08:00 看过effective C++和深入C++对象模型。不过没啥C++实际工程经验。 我的感受是楼主对于语言的复杂度估计还停留在语法糖数量上。 C++难不在什么模板编程,这玩意V友有多少会去写?我坦言只写过求n!的模板编程。。。 C++难学是因为它把太多东西暴露给你了。 >>>C++什么时候会给你一个默认的构造函数? <<<在我没有写构造函数的时候? >>>错了,C++只会在你没写构造函数且你的类成员有构造函数,基类有构造函数,有虚函数,有虚基类这四种情况下,为你产生一个空得构造函数 <<<F**K ME. Life is too short for C++ Standard, I use Python. |
87 ChangxuBlack 2015-07-13 21:37:55 +08:00 @kamushin 嗯是的,我觉得C++的难就难在它支持多种编程范型 |