- 主题:有个老外code review不让过
对于楼主的path来说,强制要求两个const不一定合理吧,reviewer不一定能确定函数里要不要用到path++吧,或者reviewer认为你要这么操作应该另外定义一个变量把path复制过去这么用?好像这么干没意义呀,反正函数内用了path++也不影响外面的调用者的path
在我看来这个多出来的const真正作用应该是假如真的不需要path指向其他地址,也就是不需要path++类似用法,这个const可以让这个函数的阅读者对这个path参数放心,中途从未指向过其他地址,在代码中间的任何地方用到时都知道这就是指向传来时的那个地址
【 在 comus 的大作中提到: 】
: 不好意思纯C用不多,但给你搜了一下还有那么几行。
: 另外strcpy没写成这样,是因为src在函数里需要++,所以不可能加两个const。考虑了一下,加不加两个const要看函数里有没有对指针++操作,和前面有人说的一方面增加可读性,另一方面防止后续有人随意进行++操作,从而引入风险。
: [upload=1][/upload]
--
FROM 121.6.158.*
如果是设计上认为这个path永远不需要改变指向,确实应该加一个,如果设计上允许实现者去使用类似while(path++)的写法对路径字符串做遍历,比如数路径里有几个/,应该可以不加const
【 在 comus 的大作中提到: 】
: 如果函数里不对指针操作lint就要求加const。按你说的,lint把对参数做const检查的规则都去掉,用lint有何意义?
:
:
--
FROM 121.6.158.*
我觉得你第二个说法不对,对于函数外面来说这个写法是无意义的,就你的例子来说,如果不能访问第10个,光看这个函数声明无法保证的,调用者无法确认这个假设是安全的,因为函数实现里只是不能用这个path参数指向第10个,不代表函数不会访问第10个,最简单的,万一里面有*(path+1)呢?
所以这个写法只是方便阅读这个函数实现的人,对于调用者完全没有额外意义,不管1个const还是2个const,调用者都只能认为这个函数不会去修改path指向的那个字符串,自己传给path参数的变量在调用后,也仍然会指向原先的路径字符串
【 在 comus 的大作中提到: 】
: 我感觉老外肯定是看了函数实现,发现path并没有做++操作,所以说要加第二个const。
: 的确像你说得,一个是增加可读性,让函数外面知道path在内部没有做++操作,不会导致异常(比如外面是一个int [10]数组,传了第[9]到函数里,函数不会++指向非法得[10]),另一方面就是让维护的人修改函数实现的时候不要添加++操作,如果要++操作编译器会提示,从而让程序员认真考虑。
:
: ...................
--
FROM 121.6.158.*