免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: windyrobin
打印 上一主题 下一主题

C++ 这孩子 是不是误入歧途了? [复制链接]

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
11 [报告]
发表于 2011-11-30 00:28 |只看该作者
本帖最后由 zylthinking 于 2011-11-30 00:36 编辑

流行没好货, 越是参与的人多, 越是不能集思广益, 越是会将平均智商扯低
那么C呢? C的参与的人比c++多, 平均智商比C++低?

C++其实可以变成更好的C, 只要只使用几个基本的特性, 包括class。
使用c++中的人, 一大部分其实也确实是只是使用c + c++基本特性, 如果除去这部分人, C++ 可以变得更小众;
但如果说c++缺失从C来的基本特性,还被人认为是脱离俗流, 那就笑话了, 所谓 lisp, python, lua, js 之类, 虽然我都不怎么懂, 但还是想问问,  只玩模板, 还有什么lamda 之类的C++, 比上面几个语言强到哪里?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
12 [报告]
发表于 2011-11-30 00:40 |只看该作者
回复 10# sonicling

1. 偶是男嘀……
2. 关于direct-direct-declarator, abstract-direct-direct-declarator 我还没道谢呢……
3. 其实我个人更倾向于不兼容……
本来是血亲的两门语言 —— 直到现在都可以看得到C与C++标准委会都在努力让两者更兼容 —— 用户之间却搞成这样子。
干脆分家算了, 免得搞得大家都不愉快。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
13 [报告]
发表于 2011-11-30 01:00 |只看该作者
流行没好货, 越是参与的人多, 越是不能集思广益, 越是会将平均智商扯低
那么C呢? C的参与的人比c++多, 平均智商比C++低?
zylthinking 发表于 2011-11-30 00:28


刺到你痛楚了还是怎么的
不过我保证这绝对不是在说你。


后面没看明白你想表达什么。

我说的是C++提供解决问题的机制越来越强, 也越来越复杂, 导致用的人少, 算是脱离流俗。
怎么扯到class上去了? 关于class, C++11可没删什么东西。

至于lambda的用处, 前段时间鹿子发了个贴:
《C++er看到这么漂亮的js代码,自杀的心都有了》 http://bbs.chinaunix.net/thread-3619354-1-3.html
而C++支持lambda之后, 标题就得将 C++er 改为 Cer 了

至于C++比你提到的另外几门语言强的地方, 比如性能, 比如与C的二进制接口直接交互能力。
但其实我认为并不需要与C源代码兼容的能力 —— 用C++编译器去编译C代码, 有什么实际价值么? 只要C++能认识C的头文件与库文件就够了。
但历史已经这样了, 我也没办法。

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
14 [报告]
发表于 2011-11-30 01:20 |只看该作者
刺到你痛楚了还是怎么的
不过我保证这绝对不是在说你。


后面没看明白你想表达什么。

我 ...
OwnWaterloo 发表于 2011-11-30 01:00


和刺痛不刺痛没关系, 我也知道你没有说我。
事实上, 我自认为是个写c++的。
我只是说明一下c++变得小众反而是脱离俗流这个观点我不认同而已。

首先c++不是苹果的机器, 人少是不可以显摆的。 作为一门用意在于被使用以创造价值的东西, 被越少人用越显得珍贵逻辑怎么也讲不通。
c++ 引入lamda等眼花缭乱的语法, 我也并不认为他是想将c++变成精英语言, 甚至我觉得他根本没考虑什么语言的发展趋势, 在我看来就是一个很俗的理由: 我加入了你可以不用, 但我加入总没有错, 我就是要全方面发展, 目的反而是为了让更多人用它。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
15 [报告]
发表于 2011-11-30 01:24 |只看该作者
回复 11# zylthinking

另外, 虽然C++11没有删除class什么东西, 但我依然觉得这东西一开始就是流俗。
我又来放地图炮了, object-oriented 就一流俗, 俗不可耐。
C++在this上也有与js相同的毛病。

C为了强调函数的入口点,非得搞个函数指针出来, 结果弄出个有类型没变量的函数类型。
C++因为那个隐藏参数, 又得搞出个成员指针……
于是在保留函数类型这一奇葩的基础上, 搞出一个有表达式却没有类型的东西 (p->*f)  ……

C++里面真正强大的机制恰好不是class相关的。 class是C++在C上新增的最最不起眼的关键字。
如果仅需要class相关的东西, 我根本不会用C++。 C虽然麻烦点, 但也足够了。

C++真正强大的机制, 反而是那些经常被列在批评名单上的: template, exception, lambda, ...
没一个是C可以通过稍微麻烦一下自己就可以搞定的。

将C++当作是OO语言的程序员, 与不将C++看作OO语言的程序员, 是两类不同的人, 学到的也是两门不同的语言。
这也是C++工业强度低的一个体现。 这语言已经将许多编程方法融合到一门语言当中, 导致仅次一门语言就可以形成不同的使用风格与流派。
真要掐架, 还真轮不到其他语言, C++内部就可以战到昏天黑地了

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
16 [报告]
发表于 2011-11-30 01:34 |只看该作者
但坦言说 我是挺抵触c++越变越复杂的, 因为在我看来其实就是c++在java化

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
17 [报告]
发表于 2011-11-30 01:56 |只看该作者
作为一门用意在于被使用以创造价值的东西, 被越少人用越显得珍贵逻辑怎么也讲不通。
zylthinking 发表于 2011-11-30 01:20


这么对比……
doc与tex的用户数?
虽然有一个vim程序员,emacs程序员,其他程序员的分类, 但这个分类中其他程序员的用户数?
windows与linux的用户数?
PS与imagemagick的用户数?

不是主动愿意被用得少, 而是没办法被更多的人接受。
doc、其他编辑器、 PS的卖点就是所见所得、上手方便、 手工编辑而非编程接口。
但论创造的价值, 学术上的, 你说是tex多还是doc多?


c++ 引入lamda等眼花缭乱的语法, 我也并不认为他是想将c++变成精英语言, 甚至我觉得他根本没考虑什么语言的发展趋势, 在我看来就是一个很俗的理由: 我加入了你可以不用, 但我加入总没有错, 我就是要全方面发展, 目的反而是为了让更多人用它。
zylthinking 发表于 2011-11-30 01:20


绝对不是你说的那个"我加入了你可以不用, 但我加入了总没有错"的理由。
这东西真是好用, 只要编译器敢支持就敢用。 没了它functional头文件就是废物。
C++03没有这东西, 会得人去各种模拟, 比如boost::lambda,  AD818最近的一个帖, 还有boost有个叫phoenix啥的。
于是又被批评C++程序员喜欢玩弄语言技巧……

其实真正的原因是我上面说的, C++03还不够强大, 所以会操蛋。
就好比没车可以马儿骑 —— 如果没有C++
但有车没油, 路途又有点远的情况, 想办法搞点油却被批评 —— C++03
现在终于有车有油了 —— 一旦真正支持lambda了, 那些操蛋的库就都是历史了。


关于发展趋势。
更早的情况我不知道, 至少lisp从50+年就开始支持匿名函数。 之后应该是在fortran以及后续一些语言里被干掉, 不再允许函数嵌套。
然后出现的一些语言又将这机制添加回来 —— 这是发展趋势。


lambda语法本身不眼花缭乱。
就多了一个[] 与 -> , 其他就是原有的参数列表与函数体的语法。

因为允许嵌套就会产生一个新的,或者说lisp早就有了又被重新发明的概念,就是闭包。
困惑人的应该是这个。 似乎那些不支持嵌套函数的语言也是因为这东西实现麻烦。

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
18 [报告]
发表于 2011-11-30 01:59 |只看该作者
回复  zylthinking

另外, 虽然C++11没有删除class什么东西, 但我依然觉得这东西一开始就是流俗。
我 ...
OwnWaterloo 发表于 2011-11-30 01:24


template 我承认c确实做不到相同效果, 但一个问题是, template 真的起到了什么作用吗?
STL, 或者 boost, 将容器和算法脱离, 算是一大成果了; 但其实这些容器及算法也是可有可无的, 你不能以方面来否认他们的可替代性。 最后, 所谓容器算法分离, 最终起到的效果也就是让人少些几行代码。
template 和 OO一点关系都没有, 所以, 就算我将c++当作OO来用, 也没有理由用template

exception 就算了, 我始终不明白 exception 比返回值好到哪里去, 连一个 list.push_back都要 try catch 才算万无一失的东西, 用起来真是麻烦透顶。

lamda 的必要性, 算了, 我不懂

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
19 [报告]
发表于 2011-11-30 02:05 |只看该作者
太晚了扯不清了, 各有各的观点也不用非要一致。
我的观点其实很下里巴人:
语言怎么简洁易懂怎么来, 只要能不降低性能; 剩下的让程序员自己搞定吧。

睡觉睡觉

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
20 [报告]
发表于 2011-11-30 02:10 |只看该作者
回复 16# zylthinking

>>  因为在我看来其实就是c++在java化
你这是赤果果的侮辱啊……

>> 但坦言说 我是挺抵触c++越变越复杂的
感到复杂应该是因为你还没了解C++03的复杂。 了解了C++03的复杂就会觉得C++11简单了。


举个例, 比如需要求int有多少value bits。

  1. int bits_of_(int remain)
  2. {
  3.       if (remain)
  4.           return 1+bis_of(remain>>1);
  5.       return 0;
  6. }

  7. int bits_of(void)
  8. {
  9.       return bits_of(~(int)0);
  10. }
复制代码
直白的代码就是这样。 但结果是运行时而非编译时。


但C++03允许程序员使用template进行许多编译时计算, 不仅仅是编译时类型计算, 还包括编译时值计算。
就会产生这样的代码

  1. template<typename T>
  2. struct bits_of
  3. {
  4.       enum { value = bits_of_<T,~(T(0))>::value };
  5. };

  6. template<typename T,T remain>
  7. struct bits_of_
  8. {
  9.       enum { value = 1 + bits_of_<T,remain>>1>::value };
  10. };

  11. template<typename T, 0>
  12. struct bits_of_
  13. {
  14.       enum { value = 0 };
  15. };
复制代码
C++11终于可以不这样写了, 还是原有的写法, 再多添加一个 constexpr 就完了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP