C++之 身在曹营心在汉

turing-complete 2011-05-13 10:47:54
为什么我发现身边的很多程序员,名义上用着C++语言,但却热衷地写着C风格的代码。

提到字符串,他们就 char* ,提到数组他们就 new int[]。用string 和 vector 代替不了此两者嘛?

代替不了的话,有没有人能给我反例?哪怕是为了兼容旧代码,我也可以做到代码里看不到char* 吧?

我们选择了c++不就是选择了,开发效率和运行效率的折中嘛,为什么要这么热衷于C代码?

作为一个愤青,呵呵,每每看到如是代码,我的内心总是久久的不能平静,坐等开导者。
...全文
4395 169 打赏 收藏 转发到动态 举报
写回复
用AI写文章
169 条回复
切换为时间正序
请发表友善的回复…
发表回复
zenner3000 2011-06-19
  • 打赏
  • 举报
回复
[Quote=引用 163 楼 wgm001 的回复:]

接上面,

新手用c++写出这样的代码, 可以理解, 基本上刚开始, 都是这样子, 但是一个写了二两年代码的人, 还是这副德性, 那就算了, 我觉得这些人还是别干程序员了得好, 免得影响下一代程序员...

正如楼上几位所说, 是受那些垃圾前辈的影响.

这些垃圾前辈可能对某方便确实有经验, 但写出的代码, 就跟谭浩强的书上的代码一样, 连运算符旁边空格都不敲, 美名其日, 能正常运……
[/Quote]
嗯,学习了
tulipcaicai 2011-05-17
  • 打赏
  • 举报
回复
C++有容乃大
tomatobin 2011-05-17
  • 打赏
  • 举报
回复
lz,个人风格吧,现在很多高校教学用的第一门语言课还是c,用着用着就习惯了哈
xiaopoy 2011-05-17
  • 打赏
  • 举报
回复
话说,LS的#163写过编译成功的程序没啊?linux的源代码怎么样呢?windows的API方格也不是唯一的方式,有时间研究模板什么的来规划代码,我还不如去玩会儿汇编代码优化跳转数量和opcodes长度呢。
jackzhhuang 2011-05-16
  • 打赏
  • 举报
回复
用char*生成的汇编代码相对简单点,也就是效率高点。所以,如果一个字符串只是一般性的操作或者作为参数传递,那么用char*其实比用string好。

用char*做参数,是因为函数若是作为接口的方法导出去给其他模块用,那么最好就用char*,因为其他模块有可能是其他编译器编译的,编译string生成的代码可能会不一样,这样在调用的时候会崩溃。

至于数组,vector完全可以替代new[],有人要是觉得不可以,那么得多看看书了。
turing-complete 2011-05-16
  • 打赏
  • 举报
回复
[Quote=引用 155 楼 yanshuishui 的回复:]
很多新手的代码没的选择,都是跟项目中其他前辈学的,因为大家的代码格式最好统一,所以就这么遗传下来了吧...
[/Quote]
嗯 有点道理哈
turing-complete 2011-05-16
  • 打赏
  • 举报
回复
[Quote=引用 154 楼 zhao4zhong1 的回复:]
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
[/Quote]
这位兄台,我发现您是逢贴必回啊。可你也不能老用这句话复制了来回贴啊,话是不错,也得看看合不合时宜吧。
turing-complete 2011-05-16
  • 打赏
  • 举报
回复
[Quote=引用 156 楼 wgm001 的回复:]
我也一愤青.

那些什么都喜欢自己写这代码的人, 一般都是新手, 或者不思进取的顽固份子...

这些人死活都不愿意学习新的东西, stl在他们嘴里骂成垃圾, boost也是垃圾, ace也是垃圾, 神马都是垃圾...

这样的人不思进取很恶心, 你要说他, 他还会跟你较劲, 他们还会说, stl花半小时就学会了, 但我就是觉得他垃圾, 效率低等等借口...

我奉劝这些朋友干脆直……
[/Quote]
哈哈,这么大的世界就是知己啊
wgm001 2011-05-16
  • 打赏
  • 举报
回复
我也一愤青.

那些什么都喜欢自己写这代码的人, 一般都是新手, 或者不思进取的顽固份子...

这些人死活都不愿意学习新的东西, stl在他们嘴里骂成垃圾, boost也是垃圾, ace也是垃圾, 神马都是垃圾...

这样的人不思进取很恶心, 你要说他, 他还会跟你较劲, 他们还会说, stl花半小时就学会了, 但我就是觉得他垃圾, 效率低等等借口...

我奉劝这些朋友干脆直接写c代码吧, c++不是c, 所以别把c++当c用了, 若是硬要拿一把斧头去干杀猪这事情, 那我只能说你是神人, 牛人, 牛B, 你比谁都牛...
daimen_2014 2011-05-16
  • 打赏
  • 举报
回复
很多新手的代码没的选择,都是跟项目中其他前辈学的,因为大家的代码格式最好统一,所以就这么遗传下来了吧...
赵4老师 2011-05-16
  • 打赏
  • 举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
冻结 2011-05-16
  • 打赏
  • 举报
回复
大家都把
char* buff;
char* str;
混淆了。
char* buff 可以是 unsigned char*,int*,short*, void*。
char* str 尾要有'\0',经常配合 C 函数strxxx() 来使用。

什么风格的代码,有些公司代码规范规定,有些自己做主,我们不必强求别人怎么写。
heguo 2011-05-16
  • 打赏
  • 举报
回复
c#吧
turing-complete 2011-05-16
  • 打赏
  • 举报
回复
[Quote=引用 145 楼 verycctv 的回复:]
“提到字符串,他们就 char* ,提到数组他们就 new int[]”
如果像楼主说的这样,他们只会用char* 只会用new int[]那可能是自己太不思进取了,如果是很了解stl,那可能就有其他的原因吧。猜测一下。
1 惯性。第一语言对人程序员产生的影响很大,c或java的程序员用c++肯定自己不同的偏好,会有一些冲突,包括编程的习惯和思想,解决问题的手段等等。
2 需要。c还是有它不……
[/Quote]
谢谢这位仁兄的忠告
turing-complete 2011-05-16
  • 打赏
  • 举报
回复
[Quote=引用 149 楼 berkowitz 的回复:]
如果是做跟嵌入式系统相关的,就会出现这种情况。其编译器支持部分的c++语言,但是对于很多特性无法支持,例如多继承、虚继承,stl、boost等更加支持不起来。那么这个时候的代码就会是c++框架加c style的代码风格
[/Quote]
这个前面提过了
berkowitz 2011-05-16
  • 打赏
  • 举报
回复
如果是做跟嵌入式系统相关的,就会出现这种情况。其编译器支持部分的c++语言,但是对于很多特性无法支持,例如多继承、虚继承,stl、boost等更加支持不起来。那么这个时候的代码就会是c++框架加c style的代码风格
turing-complete 2011-05-16
  • 打赏
  • 举报
回复
[Quote=引用 147 楼 sevencat 的回复:]
我想可能是因为stl的学习成本过分高,在试图解决问题的时候引入了另一堆复杂性。
其实有时候可能性能真不是问题,习惯才是问题。

即使像网络接收那种也是可以用c++的,比如说可以用类似boost的那个固定array,我还是那句话,stl太复杂了,很多人为了减轻负担,就选择了直接不用,这样可以把更多时间用在写逻辑方面。
[/Quote]

七猫兄高见啊
wgm001 2011-05-16
  • 打赏
  • 举报
回复
接上面,

新手用c++写出这样的代码, 可以理解, 基本上刚开始, 都是这样子, 但是一个写了二两年代码的人, 还是这副德性, 那就算了, 我觉得这些人还是别干程序员了得好, 免得影响下一代程序员...

正如楼上几位所说, 是受那些垃圾前辈的影响.

这些垃圾前辈可能对某方便确实有经验, 但写出的代码, 就跟谭浩强的书上的代码一样, 连运算符旁边空格都不敲, 美名其日, 能正常运作...

但话又说回来, 即使是自己是新手, 也不能受一些不良风格的老程序员影响, 也要坚持学习, 学习好的风格.

怎么学? 多看看国外开源的大项目的代码, 先看风格, 然后尝试理解, 最后基本上就能通吃一般的开源项目, 终点就是自己也能写出那么牛的像似浑然天成一样的代码...

hhsuc 2011-05-16
  • 打赏
  • 举报
回复
我咋就木有考虑过这种问题呢?面壁去了
emptyness 2011-05-16
  • 打赏
  • 举报
回复
个人觉得用stl和用char *这种事情不能强求, 强求一定用stl 也并不符合C++风格.
倒是有一点, 接口部分 尽量少用stl, 大家都知道api的接口都是char *, 连接口 都是string,只会搞得自寻烦恼.
大概总结就是模块内部尽量stl,boost,模块间 尽量C风格吧.
加载更多回复(145)

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧