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 1
试试模版 各种隐式转换 虚指针 多态...这些东西没这么简单就能掌握
|
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 1
如果能从无到有写一个 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 1
|
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 1
找个好工程
如android的binder机制实现原理 里面的虚函数跳来跳去 对虚函数表没个概念你根本看不懂 |
23
yahoo21cn 2015-07-11 16:26:31 +08:00 2
现在都面向搜索引擎编程了,用什么语言都一样
|
24
ChangxuBlack 2015-07-11 16:33:50 +08:00
模板元编程在Python里有什么对应?
|
25
nozama 2015-07-11 19:30:35 +08:00 via Android 1
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 2015-07-11 22:54:09 +08:00 1
个人觉得,你学会使用它并不难
你用它去实现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 1
其实可以看看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 1
|
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
Taojun0714 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 1
其实楼主想多了。
问题不在语言上,你没有实际业务来考量两个语言当然是从语法上啊。 当你处理高并发环境下的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 1
可以去看effect 系列,了解各种坑
|
81
sgissb1 2015-07-12 10:35:10 +08:00 1
这个某种语言当初设计时候的分工有关
就像汇编一样,概念多简单。但写个东西试试。谁用就觉得烧脑子。 c和c++的设计,当时就是为了解决让人类能“看懂”的分工设计的。 在c/c++之前还有很多语言,都是由于种种原因用途很有针对性。 c/c++这类已经算比较偏底层(没有汇编那么底层),用起来才真能感受到难。 你觉得学的容易,用起来容易。而是你把他当作python这类解决实际的一些工程问题的语言去对待了。 |
82
lilydjwg 2015-07-12 12:40:39 +08:00 1
@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 1
@kevinyoung eigen就是靠模板元编程获得了变态级别的效率(BLAS库里数一数二快的了),boost的MPL非常难学。。。BOOST还有个东西叫spirit,靠模板元编程生成针对领域特定语言的编译器,这个最酷了,详见http://boost-spirit.com/home/
|
86
kamushin 2015-07-13 01:35:27 +08:00 1
看过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++的难就难在它支持多种编程范型
|