免费注册 查看新帖 |

Chinaunix

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

没有说C坏话的,但其他语言都会遭到不同程度的责骂,特别辱骂C++的最多最强烈,为啥? [复制链接]

论坛徽章:
0
71 [报告]
发表于 2011-12-27 13:45 |只看该作者
回复 64# msappleggle
喷C++的人大多是跟着起哄的,很有有人能说到C++实质的问题上。

论坛徽章:
0
72 [报告]
发表于 2011-12-27 14:44 |只看该作者
挣啥呀,没有意义的话题,楼主就是有一个装B的脑残,能解决问题就是好语言

论坛徽章:
1
15-16赛季CBA联赛之佛山
日期:2015-12-14 17:57:31
73 [报告]
发表于 2011-12-27 16:02 |只看该作者
做c的装逼人比较多。。觉得自己高尚。。
包括linus本人,也是一sb,和gates比差远了,还自以为自己是大爷

要是真牛,就做一个公司改变世界,停留在语言的层面未免太。。。 不说了


ps  cu进入一个帖子之后 为啥还要发布主题呢 刚才按错了 发布了一个没用帖

论坛徽章:
0
74 [报告]
发表于 2011-12-27 16:45 |只看该作者
ruifengzhangyi 发表于 2011-12-27 16:02
...
要是真牛,就做一个公司改变世界
...


论坛徽章:
0
75 [报告]
发表于 2011-12-27 16:48 |只看该作者
回复 73# ruifengzhangyi


    您这是高级黑吧

论坛徽章:
0
76 [报告]
发表于 2011-12-27 16:51 |只看该作者
回复 73# ruifengzhangyi


在《时代》周刊根据读者投票评选出的二十世纪100位最重要人物中,李纳斯居然排到了第15位,而从20世纪的最后几年就开始霸占全球首富称号的盖茨不过才是第17位


...   少年其实你来错地方了呵呵

论坛徽章:
0
77 [报告]
发表于 2011-12-28 00:27 |只看该作者
回复 69# Heartwork


    那为什么没多少人愿意用C++来写东西呢?

论坛徽章:
0
78 [报告]
发表于 2011-12-28 00:42 |只看该作者
这个贴提问的好!问得C++的粉丝们哑口无言,回答的几个也是乎自己嘴巴,呵呵~~~

论坛徽章:
0
79 [报告]
发表于 2011-12-28 00:53 来自手机 |只看该作者
比来比去的其实也没什么意思,各取所需各取所好罢了。

在这里喷来喷去只会暴露自己技术不强素质低下。

论坛徽章:
0
80 [报告]
发表于 2011-12-28 11:36 |只看该作者
本帖最后由 Heartwork 于 2011-12-28 11:44 编辑

回复 77# x5miao
很多问题导致这个结果,但是在我看来,复杂度和效率都不是根本问题。

下面是我认为比较突出的,阻碍C++大规模应用的两类问题。

1)C++的很多关键的行为在标准中没有描述。

只举一个简单的例子,返回值。
  1. #include <iostream>

  2. using namespace std;

  3. class null {
  4. public:
  5.     null(const char *) {
  6.         cout << "null (const char *)" << endl;
  7.     }

  8.     null(const null &) {
  9.         cout << "null (const null &)" << endl;
  10.     }
  11. };

  12. null return_null(const char *a)
  13. {
  14.     return a;
  15. }

  16. int main(void)
  17. {
  18.     null n = return_null("a");

  19.     return 0;
  20. }
复制代码
你知道上面的代码调用几次构造函数,分别是那几个吗?上学的时候写过一个程序,就出现了类似上面的问题,那时候的编译器调用了两次构造函数,null(const char *)和null(const null &)。这样的结果导致我的代码统计null对象的个数时出现了问题,最终的解决方案是将return_null的返回值改成const char *。

目前的编译器(g++)已经可以将这个匿名对象优化掉了,这样的结果看起来貌似也可以接受。

这样的代码呢:
  1. #include <iostream>

  2. using namespace std;

  3. class null {
  4. public:
  5.     null(const char *) {
  6.         cout << "null (const char *)" << endl;
  7.     }

  8.     null(const null &) {
  9.         cout << "null (const null &)" << endl;
  10.     }
  11. };

  12. null return_null(const char *a)
  13. {
  14.     null temp(a);
  15. // some operation on temp
  16.     return temp;
  17. }

  18. int main(void)
  19. {
  20.     null n = return_null("a");

  21.     return 0;
  22. }
复制代码
可能没有接触过类似问题的话,谁都认为调用了两次构造函数,但是使用g++的默认编译(未开启优化标志),结果却是一次,这么基本的问题在C++标准中却是一个依赖具体实现的问题。这样的话代码不要说跨平台,连跨编译器都是问题。

2)设计粗糙

编程语言提供的语法语义的一个基本目的就是屏蔽复杂性。说白了编译后的代码都是机器码,任何语言的功能都是可以使用机器码来实现,那为什么使用高级语言呢,就是因为它提供了一种更高级的抽象,避免程序员陷入那些繁琐的细节。C++在这方面的缺陷尤为突出。

反面例子很多,比如多继承(菱形继承的派生类要求修改其父类的定义,将父类的继承类型改为虚拟派生),模板的代码膨胀(Meyers的书里有对应的解决方案,但是这样一来模板就剩下类型安全这样一个好处了,而且实际应用起来繁琐、复杂),类型不一致性(STL实现中对void类型和其他系统类型的特化、const char *的语义与const object *语义的冲突)

这些问题加重了程序员的负担,使得C++程序员对于这些有问题的特性敬而远之,有的甚至直接使用C。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP