为什么使用C++
人的精力(有点像墨菲法则),不要去打扰那些正在做完美解决方案的人。人们天生就会被一些稀有资源吸引。结论就是:诀窍和稀奇古怪的性质就是稀有资源,所以会引起人们的注意,更不必说掌握一种诀窍可以使人感觉自己与众不同。糟糕的是,即使是没有价值的诀窍也会引起人们的强烈注意。 C++里有多少技巧?C++里有多少诀窍?总之,C++有多少复杂之处? 公平地说,大多数窍门和技巧在最近几年都已经被发现了(例如,modern C++),已经用在了真实需求中,特别是实现高灵活性和属性类库组件的需求(考虑所有在boost中的组件)。它们确实(在一些程度上说)引导了一些现实问题的完美解决方案。可以这样考虑这件事情:如果你处在这样一种情况下,你得使用窍门来实现一些确实有用的事情;或者你不使用窍门实现它,那么其他人就不会从使用它上得到好处。你会选择哪种?我想聪明的人会选择前一种,不管窍门有多难,实现有多麻烦。 但是所有的争论都不能改变这样的事实:那就是我们值得拥有一种可以在代码中干净地表达我们的想法的语言。以boost.function/boost.bind/boost.tuple为例,variadic templates(可变模板)可以很容易地(通过减少通信线路为原来的十分之一)实现这三个(将来会更多)类库,代码会变得简洁,尽可能地简单。Auto, initializer-list, rvalue-reference, template-aliasing, strong-typed enums, delegating-constructors, constexpr, alignments, inheriting-constructors,等;所有这些C++0X的特性,它们都有一个共同的目标——去除语言中的各种附属复杂性或阻碍。 就像Bjarne Stroustrup说的,显然,C++太复杂;显然,人们有些恐惧它而放弃它。但是“人们也需要相对复杂的语言来处理绝对复杂的问题”。我们不可能减少语言的特性来使语言变得更有力。像是模板这样复杂的特性,或是更复杂的多重继承,这些可能会对你的需求更有用,你只需要非常认真、必要地了解它们,这样就不会搬起石头砸到自己的脚。在C++的所有复杂性中,唯一妨碍我们的就是附属复杂性(有人称它为“阻碍”),它不是语言所支持的范例(只支持三个)。这就是我们为什么要加强C++0X的重要原因,因为它的目标是去除C++中长期存在的附属复杂性,使所有的诀窍变得融合(这种东西数量绝对很大;你可以参看有关C++的书籍或是C++根库,你就会明白我在说什么了),这样我们才能清晰、直接地表达我们的想法。 结论 C++很难,难于正确使用。所以当你决定要用它的时候,一定要小心谨慎,一定要清楚你处在什么位置,你真正想要什么。下面是一个简单的导引: 我们需要高效吗? 如果需要,那么 在我们的代码中需要抽象吗(这个问题一定要慎重考虑,因为很难估计使用C++的高水平特性所带来的好处是否超过了正确使用它们的风险;正确的答案取决于你的编程水平训练的有多好,你遵循什么编码标准,以及这种标准加强的有多好,等)? 如果需要,那么就使用C++,否则, 我们需要C++类库来减少我们的工作量吗? 如果需要,那么就使用C++,但同时要谨记你在做什么——如果你的代码并不真的需要所有梦幻抽象,那就不要勉强使用它们;不要仅仅因为你写的代码是.cpp,你使用了C++编译器,就使用类或是模板。 否则,就使用C++,但是你可能会怀疑为什么不用C++的C编码核心。同样的理由:人们很容易被稀奇古怪的语言特性所迷惑,即使他们真的不知道这些特性对他们是否有帮助——我可以不厌其烦地告诉你,我写过一串类,只是为了找出“这些类到底是什么鬼东西”。所以,如果你能坚持C核心或是带有部分C++的C核心,并且保持事情简单(KISS);或者如果你的代码需要从C移植到C++,那么就使用C++吧!但是一定要小 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |