新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
稍有积蓄, 积分 407, 距离下一级还需 93 积分
论坛徽章:0
本帖最后由 aquei_cu 于
17:58 编辑
毕业到现在的七年时间,一直从事windows平台下软件开发,使用C/C++语言。
不敢自称“过来人”,只是一个“在路上”的码农,就以码农的身份谈一谈自己对C语言,C++语言和争论的想法。
一、C++语言
1.1 classname::
每个类成员函数都要加个&classname::&
有一天,我写了一千行代码,我突然发现其中有几百行的函数定义都在写classname::这让我很很崩溃。
python是这个样子class A
{
& & def f(self):
& && &&&pass
}复制代码跟C++类似的Objective-C是这个样子@interface A
{
& & //
}
-(void)f;
@end //A
@implementation
-(void)f
{
& & //
}
@end //A复制代码少敲打了很多字母,码农的生活美好了一些,不是吗,不是吗?
类中的成员分为public,private,protected
protected除了练习和考试之外,至今没有在真正的项目里用过。
1.2 public,private一个成员变量真的要private之后再提供get() set()方法吗?
真的需要一个private的成员函数吗?
1.3 namespace
在以前的公司里,有个员工和我重名,当行政部,每次发放节日礼物的时候,
他们很自然的选择XXX1和XXX2的命名方式,
从来没有使用XX部的XXX和OO部的XXX进行区分。
程序语言是一门工具,用来表达思想的工具,
既然是这样的工具为什么不使用更贴近人类思考方式来进行,前缀+函数名不是很好,为什么还要命名空间?
命名空间解决C中的宏冲突,为什么还要命名空间?
为了少敲namespace::class::function,而是用using namespace,又带来了命名空间污染的问题。为什么还要命名空间?
C++的继承分为public private和protected。到已经忘记了,三种继承的区别,因为我根本没有用到也看不到有人用...
1.4 多态class A
{
& & & & virtual void f();
}
class AA
{
& & & & virtual void f();
}
class AB
{
& & & & virtual void f();
}
A* pa = new AA();
pa-&f();复制代码最近一段时间学习了objective-c,发现基础教程里根本没提多态这个事儿,难道他们不够面向对象吗?不是,人家一个id类型加NSObject基类搞定了这一切。
void*的多态,才是真正的多态...
1.5 类竟然不是对象?!
如果类是一个对象,一切的调用就动可以在运行时解决。这个世界是不是美好了一些呢?
1.6 try...catch
如果try...catch有用,我还用if...else干嘛,如果我知道这里会异常,为我什么不前面做好检查,后面做好判断,就地把异常解决掉,非要throw出去,在外部处理呢?
1.7 很多很多
&&还有很多很多的问题,比如标准库不标准,实现不一致等等。
&&总之,C++语言是门复杂的语言,正因为他的复杂,造就了很多的缺点,码农们都知道一个道理,代码写的越多,BUG也就越多,一行代码不写,肯定是零BUG。同样,C++是复杂的,所以它可以商榷的问题肯定多。复杂的另一种说法是丰富,你可以随心所欲的从C++里抽象出一个子集来用,你觉得不好的地方可以不用,这就是C++。也是生活,选择才是最重要的。
C语言相对于C++是门简单的程序设计语言,因为简单所以值得吐槽的地方就比较有限,正是因为简单,导致你用起来的时候有大量的工作要做,比如字符串这玩意已经成为大多数语言内置的对象,但在C语言里,惨不忍睹啊,除了标准库里有限的几个函数之外,基本上就没有更深层次的支持,用C语言去做文本分析,做web开发?不管你疯没疯,反正我是疯了。还有这个int,变幻莫测的int到底是多少位?他的含义到底是神马?机器字长?整数?
争论是个好现象,如果论坛失去争论,论坛将会怎样?
从争论中,我才能真正的了解到它的缺点。或者说系统的了解他的缺点,有论点有论证。没有争论就没有互动,这也是我喜欢论坛的原因之一。就像你百度搜索“面向对象缺点”一样,各个博客上充斥的满是一家之言,或者是转来转去的东西,根本听不到别的声音,只有在论坛中的争论,才能看到真正新鲜的东西,真正思考过的东西。
如果,一个帖子下面的跟贴,都是“沙发”“板凳”,“同意”,“楼主你太厉害了”,“楼主说的对”...这样的回帖,那论坛和博客和微博还有什么区别?!
对于个人的喜好,我喜欢看以下人的帖子:
说那么多废话干嘛?!秀代码!
&&想法达人。
&&辛勤的新闻发布者。
&&大家来找茬
&&理论爱好者,喜欢把什么东西都归结到哲学上去解决他消灭它。
&&标准爱好者,坑王
不喜欢以下人的帖子:
胡言乱语了这么多,其实我是冲着书来的。祝自己获奖成功。
稍有积蓄, 积分 498, 距离下一级还需 2 积分
论坛徽章:1
顶一个,说的相当到位
巨富豪门, 积分 29573, 距离下一级还需 10427 积分
论坛徽章:4
额……被无意识@召唤过来了……
本来不大想参加这次活动,主要是我自己对C/C++之争已经有了很清晰的认识,觉得没什么好表述的而已,不过看到了奖品中的Imperfect C++………………口水ing啊……残念上次没拿到《代码之魂》……
OK那就第一次正儿八经做活动(而不是搅场子Orz)吧,恩。
1、您在C和C++之争中支持哪方,为什么?
其实没什么支持不支持的,语言本质上就是工具,如果说倾向,也是只工具是不是顺手(基本要求)和工具是不是符合你的审美观(决定性要求)而已。就如同一个美工不会用一把铲子去画画一样。顺手的话,C/C++程度其实差不多,那么主要的区别就落在人的喜恶上了。C++编译器能帮你做更多,你能做更多magic的事,但随后你就会发现你的代码千疮百孔,别人可以用各种办法爆你的菊花(最简单的爆法:#define private public -_-||||),所以从个人感情上,我更喜欢C,除非直接改我的源代码,否则是什么就是什么,没有任何办法去破除代码的界限,可以很清晰地去做模块化和防御式的编程。当然C也绝对不是滴水不漏的,只是所有特性都在你心中,犯不着为了不小心踩到不该踩的地雷(默认类型转换啦,默认构造函数啊,默认xxxx啊神马的……)而烦恼。
但是,C++的灵活性啊,C++强大的编译器检查啊,怎么办?
我的想法是,C本身的编译器检查已经足够——如果你的接口设计的好的话。因此,我并不需要了解过多的概念。C++用过好几年,但是换到C,我感到久违的自由。
C还有一个问题是数据结构匮乏。一种办法是用数据结构库,另一个办法——我并不是独立地用C,我现在的开发基本上是C+Lua式的混合开发。Lua很小,可以很容易地包含在你的软件里面,你只需要根据Lua的规范(也可以违背),写Lua的C模块,然后你就可以在Lua里面做你想做的任何事情。所以今年的大部分时间,我写的都是C的Lua模块。
2、C和C++各自适合的领域是什么,为什么?
其实他们的领域是很有点重叠的,不然也不会有那么多争论。从技术上说,C++适合应用级代码,而C适合库级代码。所以用C写Lua模块(库)是很合适的。C++的灵活性适合书写逻辑比较复杂的东西,比如网游。虽然逻辑复杂本身有动态语言帮忙,但是很多时候你还是会觉得C++的效率更胜一筹。而C就适合给这样的C++程序写写底层的支持啦,库啦什么的。
那么,他们之间到底有没有优劣可言呢?对个人来说,是有的。对单个人来说,审美决定了他用C还是C++,比如Linus,使用C++就意味着跟无数细节作斗争,要么做苦行僧,要么出来混就一定得还。而C干净,整洁,出尘不染。然而干净漂亮的C却不太容易立刻做事,因为C缺乏一些基本的支持,而C++在丰富的标准库下,至少写一点简单的程序是没啥问题的。然而,这种简单性就像恶魔的诱惑,一步一步让你忘了美好代码的样子,最终看到满目苍一的代码的时候,要么你已经习惯了混乱,要么你会告别C++。
其实可以说是两种不同审美的争论吧。
3、读完试读章节后有哪些感想?(回答第3题的时候 需要标注图书名称,例如:《C++ Primer Plus(第6版)》+感想)
这里要说说《Imperfect C++》,CU做了这么多次活动,我是第一次下样张来看,这本书给我的感觉非常好。虽然我本人不用C++,但是我依然很喜欢研究C++,因为C++上面基本上各种特效都会有一点。Imperfect C++的文风很好,而又写的很严谨,我很喜欢~里面不完美的地方用方框框起来,很有Effective C++系列的味道(当然,从名字就可以看出其致敬之意)。Effective C++及其致敬的一些书我是很喜欢的,最喜欢的一本是《Exceptional C++》,这本书从实用角度上说更胜Effective C++,从猎奇角度上也比Exceptional C++优秀,是本不可多得的好书。恩,希望这次能拿一本回去,嘎嘎~~
就说这么多,欢迎拍砖哦~
巨富豪门, 积分 29573, 距离下一级还需 10427 积分
论坛徽章:4
& & 粗略的看了一下,很多观点想吐槽,无奈刚刚发完贴,手有点酸。我就直接说了,不喜的话就当没看见吧——虽然我是很希望你能看到的:这么多问题,有些的确是问题,但是大多数,绝大多数都是因为你的技术不够高,你的眼界不够远,你还没看到C++的真正核心,所以才会有这样的问题。以后遇到C++特性,别问“为什么要有”,问自己“什么时候会用”,多想想,多看经典书籍(特别是C++必知必会(C++ Common Knowledge)和Effective C++这两本),很多你所谓的“问题”就不再是问题了。
顺便再说说,objc其实很好,很多设计和OwnWaterloo的想法不谋而合,就是……似乎太丑了……
小富即安, 积分 3402, 距离下一级还需 1598 积分
论坛徽章:3
c++太复杂...学不会...
论坛徽章:2
提示: 作者被禁止或删除 内容自动屏蔽
论坛徽章:2
提示: 作者被禁止或删除 内容自动屏蔽
白手起家, 积分 32, 距离下一级还需 168 积分
论坛徽章:0
各人觉得C++好。
首先的优势是面向对象。
其次,代码好用,比如string要比char* 好用,输入输出流,要比fscanf/fprintf,sscanf/sprntf好用太多了。
再次,STL也是一大利器。
最后C++更安全,const类型,引用,智能指针都增加C中常见bug出现的几率。
白手起家, 积分 2, 距离下一级还需 198 积分
论坛徽章:0
1、您在C和C++之争中支持哪方,为什么?
答:都支持,在学校的时候更喜欢C++,工作之后一直都是用C开发,感觉C比C++更加简洁,模块化也非常好,看linux内核就知道了。
2、C和C++各自适合的领域是什么,为什么?
答:就个人经历来说,C在金融行业,比如其中前置系统,核心系统用的是比较多的,通讯行业用的很多,交换机路由器上的系统大多是C开发的,C++工作上没用过。
白手起家, 积分 92, 距离下一级还需 108 积分
论坛徽章:1
楼主,你这是要挑起口水战啊。
虽然这不是你的本意,我估计最终会变成对喷