免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
81 [报告]
发表于 2011-12-28 12:03 |只看该作者

喷面向对象思想

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

>> 1)C++的很多关键的行为在标准中没有描述。
有描述
>> C++标准中却是一个依赖具体实现的问题
就是描述

如果构造函数调用次数如你希望那样, 你又会抱怨C++优化不足了。

>> 2)设计粗糙
对多继承、 模板实现, 你能提出更好的设计方式吗?

>>const char *的语义与const object *语义的冲突
这是什么意思?

论坛徽章:
0
83 [报告]
发表于 2011-12-28 15:21 |只看该作者
Google 的很多东西都用 C++ 说明C++没问题

论坛徽章:
0
84 [报告]
发表于 2011-12-28 16:06 |只看该作者
本帖最后由 Heartwork 于 2011-12-28 16:13 编辑

回复 82# OwnWaterloo
>> 不好意思,确实是我用词不当。

我从来没抱怨过C++优化不足,C++在效率上有的时候比C走的更远,但是这种代价有点太高了,贴一个C的类似的代码:
  1. #include <stdio.h>

  2. struct abc {
  3.     int a;
  4.     int b;
  5. };

  6. struct abc return_abc(void)
  7. {
  8.     struct abc temp = {1, 2};

  9.     printf("temp at %p\n", &temp);

  10.     return temp;
  11. }

  12. int main(void)
  13. {
  14.     struct abc temp = return_abc();

  15.     printf("temp at %p\n", &temp);

  16.     printf("a = %d, b = %d\n", temp.a, temp.b);

  17.     return 0;
  18. }
复制代码
执行结果:
$ ./test.exe
temp at 0x22cd20
temp at 0x22cd4c
a = 1, b = 2

C也是复制了一份副本的。关键是C++的那种结果是未设置任何优化选项的!

>> 以我的水平,对于多继承和模板我肯定拿不出更好的方案。但是我觉得一个负责任的编程语言应该保证它给程序员的接口是一个黑盒,不要出了问题就看Inside the C++ Object Model一类的书找原因。
比如多继承,应该在出现菱形继承时由编译器来去掉多余的子对象,而不是修改基类的定义。这个编译期应该可以做到,但有可能会增加编译时间。

模板导致的代码膨胀:没什么好的想法。

模板的调试(模板参数检查),主要是语言层面缺少对于concept的支持(sgi STL只是利用了一些宏来做检查),所以不能给出很准确的出错信息。

>> 就是说你可以将const char *类型的字符串传给一个只接受char *类型的函数,不会在编译时报错,但运行时coredump。
现在的g++已经解决了这个问题(将字符串字面值付给非常量指针时会有警告,将const char*传给char*类型函数会报错)。

论坛徽章:
0
85 [报告]
发表于 2011-12-28 21:17 |只看该作者
Heartwork 发表于 2011-12-28 11:36
回复 77# x5miao
.........
这些问题加重了程序员的负担,使得C++程序员对于这些有问题的特性敬而远之,有的甚至直接使用C。


聪明人看透了C++的愚蠢和笨拙,看透了C++的劣根性,所以能不用C++就不用,不是敬而远之。

论坛徽章:
0
86 [报告]
发表于 2011-12-28 23:05 |只看该作者
回复 85# msappleggle
在linux环境中,为了运行速度能和c比,又能面向对象,又有一些简单的字符串库,不用c++,也没有其他选择。


   

论坛徽章:
0
87 [报告]
发表于 2011-12-29 00:09 |只看该作者
哈哈,LZ的这个提问太有水平了,坐等C++迷们回答,如果回答不上来,你们就和C++一样受辱骂被鄙视!lol

论坛徽章:
0
88 [报告]
发表于 2011-12-29 10:11 |只看该作者
你们一定很闲。能干活就行了。

论坛徽章:
0
89 [报告]
发表于 2011-12-29 13:00 |只看该作者
这样的争论有必要么? 无论哪个好哪个坏,多掌握一门还是好的,最终的需求还是要看公司的需求.
我看大家都很闲啊.

论坛徽章:
0
90 [报告]
发表于 2011-12-29 15:22 |只看该作者
c++同时做到了高性能和面向对象,其过程用了许多歪门邪道,在OO大行其道的今天自然被很多高级语言所不齿;同时面对系统级别的东西,c老大也是任我行,没给到c++撒野的机会。于是,c++得了高不成低不就的中年危机...但是,这个全能手也不是盖的,被骂也只是被骂而已
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP