- 主题:掐指一算,本青可以不用学c++20了
公司有技术arch不停地把大量用了30年的老代码转为14和17的语法,下一步就是用20的语法,逻辑bug一个没修,真是闲得蛋疼。
【 在 god4 的大作中提到: 】
: 还在不听出新版,加些几乎无用的特性,吃饱了撑的,就该学学python,出个官方解释执行器就行了。
--
FROM 221.220.229.*
为了语法,可以不惜某个功能不让release。毕竟不是小打小闹,其实以前c风格的代码写得挺工整的,只是不符合这位追新的风格。
【 在 hgoldfish 的大作中提到: 】
: 这是好事啊。。这么有进取心的公司不多了。长期不打理的代码都会变成 sh*t 山代码。你可以把你们这技术 arch 看成是浇水修剪枝叶的园丁。如果连这事都不干,业务逻辑再怎么好,很快就会人见人恶。
: 你们这技术 arch 真是可以了。这种事没收益,没 KPI,如果不是真有激情的人,谁去干这种吃力不讨好的活。
:
--
FROM 223.104.39.*
也不是,他是老员工,只是没人能管得了他(或者说能管他的都很温和)。
【 在 GoGoRoger 的大作中提到: 】
: 贵司人力很充足吧?
: 发自「今日水木 on M2007J17C」
--
FROM 223.104.39.*
成熟的c库改用c++编译(改少量代码),比如说类里的指针数组改vector,类成员初始化挪到变量定义位置,(输出参数)传引用改传指针,改掉memset、memcpy,一个类似检查字符串是不是绝对路径的小函数,要改成引用另一个工程的类似函数(如果被引用的函数不能完全满足要求,就再去改那个工程,导致工程间依赖很多),还有一些格式方面的,比如if后跟单个语句加不加花括号,和for在同一行的花括号改到下一行,等等。
【 在 hgoldfish 的大作中提到: 】
: 可以说说他是怎么改的啊。让大家看看他改得好不好。
:
:
--
FROM 221.220.229.*
同事大部分是特定专业的,非cs的,主要精力在业务的正确性上,产品负责人也有抓住市场窗口尽快发布功能的压力。要是没时间压力,打磨代码当然没问题了。大部分人用惯了某些函数,可以用这些函数很快地实现功能,换写法有时候会踩坑。比如说把浮点数存到字符串,本来sprintf的%g一直没问题,结果换了std::to_string出问题了,后来发现后者默认保留6位小数,stringstream也不如sprintf好用。曾经尝试用regex递归处理数组解析,有可能表达式不够精炼,总是出错(像是和内存相关),后来自己用char*数组写就没这问题了。intel的mkl接口很原始,但很多计算相关的c++代码还是得调它,所以个人觉得c++的方向应该是提供更多好用的库,而不是花里胡哨的语法。
当然,从个人发展角度,肯定是多掌握一些最新的语法技巧更好。
【 在 libgcc 的大作中提到: 】
: 这种事说不上好不好
: 如果要吃c++这口饭的话,还是把代码朝c++风格靠比较合理,这样新人也更能学到点东西
: 现在在c++里还用char*处理字符串的我是觉得不合适
--
FROM 221.220.229.*
挺好的,vc6的有些语法和标准c++不符合,一些代码在gcc编译时出错或者结果不对,vs2008应该挺好了,如果不追求新语法,并且编出的程序没操作系统兼容性问题,没必要继续升级。
【 在 wangtao26 的大作中提到: 】
: 我现在的工作就维护10几年的老代码。原来的代码都是VC6.0,我接手后,把老代码升级VS2008(请忽略我们公司还在使用这么老的IDE)。
: - 来自 水木社区APP v3.4.2
--
FROM 221.220.229.*
这方面有:把define的常量改成inline const,让把用了多年的随机数生成改成新标准里的random库里的。类变量定义位置初始化应该是11的吧,这种改动由于不是所有类都能在定义时初始化,反而不如统一在构造函数里初始化看起来更清晰。
【 在 DoorWay 的大作中提到: 】
: 这里哪些是14/17的语法?
:
: 我看是把c with class 改成c++98了。
: ...................
--
FROM 221.220.229.*
智能指针有人用的,只是老代码,结构简单的类改成用智能指针有时候显得并不智能,比如自定义的多维数组,比如简单字符串的parser及其语法树。没说这些语法不正统,只是觉得把时间花在追新标准方面浪费时间,也给原有开发者在维护代码的时候添了不少麻烦,毕竟谁也不能保证测试用例是完全覆盖的,有些改动当时没发现错误但后来发现了问题。
【 在 hgoldfish 的大作中提到: 】
: 你们还是 c 带类的写法吧。连智能指针都没用上。
: 个人觉得你们这个架构师的做法是正确的。虽然 stdc++ 的 string 是个垃圾,不过至少比 c 的 char[] 强很多。很多安全问题都是使用 char[] 没有正确判断边界引起的。snprintf() 不是类型安全的,也是容易用错。
: 根据你上面的说法,你们的架构师并没有用上各种 template<> 奇技淫巧,都是些正统的 cpp 写法。
: ...................
--
FROM 221.220.229.*
不是rand,rand好像就是个求余有点简单,是按paper轮出来的随机数,包括均匀分布、高斯等,种子是类的非静态成员,已经用了好多年,要有线程问题早暴露出来了。
【 在 hgoldfish 的大作中提到: 】
: 老的随机数生成器 rand() 和 srand() 是整个进程唯一的,所以可能存在线程间的锁。而新的标准库里面的则可以做到每线程独立。贵司这位架构司干的很不错。
:
--
FROM 221.220.229.*
你说得对,很多改动只是语法层面,对业务逻辑没有一毛钱帮助,比如做卷积运算的类里的buffer,智能指针替换普通指针有啥好处呢。当然也有情绪上的,如果你习惯用筷子,别人却把你的筷子换成叉子,而不管你用叉子会不会多花10分钟才能吃完,换谁也不会太高兴。
【 在 DoorWay 的大作中提到: 】
: 1 define vs const,是Effective cpp第二款的建议。主要是字符串替换与符号定义的区别。define没有任何优势。2000年以前的建议。 inline const只是个语法层的更新。
:
: 2 随机数是个专门的话题,我不懂。但你们要有自研算法,贸然换标准库不妥。
: ...................
--
FROM 221.220.229.*