+ -
当前位置:首页 → 问答吧 → 【C++】P姨让写给C程序员看的C++教程……

【C++】P姨让写给C程序员看的C++教程……

时间:2010-06-28

来源:互联网

说句实在话:很不想写。其实OO乃至于C++的根本目的就是更好地包装C 代码
。而不是取代C代码。因此就出现了模块化自给自足的类。但是丫的这东西又不完
备:


    1. 说自给自足了,的确,是一个小国家了,运算符重载生命期管理都有,可是最单
纯的左值右值都分不清,要么复制要么不干,这必然引起效率问题。而 C++0x的右值引用
十分晦涩:右值引用不能具名,只要一具名就立刻变成左值(或者常左值),特别的,左
值居然是不能放到右值引用上去,这和传统的语义相悖。我希望的正常的右值引
用是这样的:左值优先绑定左值,右值优先绑定右值,只有右值形参的情况下左值变右值
绑定(而不是编译错误)。问题是 C++0x太急切地需要移动语义了,因此强调:右值引用
一定是移动语义,因此不允许左值来掺和(要掺和得加上move()函数,之后生死不顾)。
这不是扯淡么……


    2. 模板这一堆纯粹是失控式的发展。首先,模板本身是不完备的(模板参数无法自
动推导——现在有了auto和declType情况稍微好了点),其次,这个不完备的模板还想整
出些浪来,看了CTG的都知道我在说什么,本来C++的重载已经复杂到无以复加了,这模板
还来插一脚搞SFINE…………反正我觉得这种东西是登不上大雅之堂的。


    这就是我不愿意写C++教程的缘故:这玩意目前根本就是个不完备的状态。根本无法
应对高效率的开发。如果想你的项目高效,要么是用特别简单的代码实际上在行C语言的
事儿,要么是用特别复杂的tricks来达到你的目标,这两者我觉得都失却了C++的意义。
我是很看好C++0x的一些特性的(右值引用+lambda+auto+declType+typeglob+class
initializer),等到这些东西普及了再来谈C++吧……


    但是说回来,实际上C++在C上面添加的所有修改,都是在组织C代码:类是按照功能
划分的C代码;模板是对C代码的复制和自动生成;引用是在减少指针的引用(区分指向单
个元素的指针和指向多个元素的指针);重载是在管理C函数的名字;虚函数是在取代运
行时的任务分派……等等等等,只要按照这样一种思路理解——C++和C唯一的不同点,就
是提供了大量的组织代码的方式——那么学习 C++就是简单的。

    反正,教程是懒得写的………………写点我对C++的认识好了,至于教程嘛,我记得
以前看过某本很薄的书,就是讲C和C++区别的,十分精细,名字我忘了…………

作者: starwing83   发布时间: 2010-06-28

C语法加STL容器及算法,对大多数C程序员就足够方便了,也是使用C++的理由之一。OO,对于C程序员而言,那个是可有可无的东西。

作者: 没本   发布时间: 2010-06-28

本帖最后由 peidright 于 2010-06-28 22:43 编辑

回复 starwing83


    为什么一定要“完备”, 而不是某种”适用“。另外,能不能反驳一下, “实际上C在汇编上面添加的所有修改,都是在组织汇编代码“ 这个观点?

作者: peidright   发布时间: 2010-06-28

回复没本:我说的是广义的OO,是软件工程学上的一种思潮,而不是C++的class。

回复peidright:你真的觉得够用么?我就问你一个最简单的问题:如果真的够用,为什么几乎所有的framework和主要的能干点事情的库都得做自己的string??

作者: starwing83   发布时间: 2010-06-28

“实际上C++在C上面添加的所有修改,都是在组织C代码”

我比较接受这句

作者: pmerofc   发布时间: 2010-06-28

回复 starwing83


    能举一个,确定因为不够用,而自己实现string的例子么?  是因为不够用,还是出于某种“人” 的原因呢?
   上面,我还补充了一个疑问,能否反驳下 “实际上C在汇编上面添加的所有修改,都是在组织汇编代码“ 这个观点?

作者: peidright   发布时间: 2010-06-28

看了大家的讨论 我决定回去再写1W行代码 回来看

作者: peijue   发布时间: 2010-06-28

偏执狂
对C++的了解过于偏激了。

作者: crowsy001   发布时间: 2010-06-28

热门下载

更多