- 主题:有个老外code review不让过
绝大部分公司/项目都不会去检查函数参数加不加const,收益极小,只会让代码变的啰嗦
而且参数上的const对于接口使用者来说是完全无意义的信息,降低接口描述的可读性
如果一个局部变量你都要用const来保证在函数内部不被意外修改,那你可能得反思下你这个函数是不是有点太复杂了
【 在 comus 的大作中提到: 】
: 我只能说你们的静态检查配置和我遇到的公司的做法恰恰相反。我无法理解你们的出发点的啥 :(
--
修改:xshoushoux FROM 58.35.30.*
FROM 58.35.30.*
我感觉老外肯定是看了函数实现,发现path并没有做++操作,所以说要加第二个const。
的确像你说得,一个是增加可读性,让函数外面知道path在内部没有做++操作,不会导致异常(比如外面是一个int [10]数组,传了第[9]到函数里,函数不会++指向非法得[10]),另一方面就是让维护的人修改函数实现的时候不要添加++操作,如果要++操作编译器会提示,从而让程序员认真考虑。
【 在 caihl 的大作中提到: 】
: 对于楼主的path来说,强制要求两个const不一定合理吧,reviewer不一定能确定函数里要不要用到path++吧,或者reviewer认为你要这么操作应该另外定义一个变量把path复制过去这么用?好像这么干没意义呀,反正函数内用了path++也不影响外面的调用者的path
: 在我看来这个多出来的const真正作用应该是假如真的不需要path指向其他地址,也就是不需要path++类似用法,这个const可以让这个函数的阅读者对这个path参数放心,中途从未指向过其他地址,在代码中间的任何地方用到时都知道这就是指向传来时的那个地址
--
FROM 120.245.128.*
如果是设计上认为这个path永远不需要改变指向,确实应该加一个,如果设计上允许实现者去使用类似while(path++)的写法对路径字符串做遍历,比如数路径里有几个/,应该可以不加const
【 在 comus 的大作中提到: 】
: 如果函数里不对指针操作lint就要求加const。按你说的,lint把对参数做const检查的规则都去掉,用lint有何意义?
:
:
--
FROM 121.6.158.*
“一个是增加可读性,让函数外面知道path在内部没有做++操作,不会导致异
常(比如外面是一个int [10]数组,传了第[9]到函数里,函数不会++指向非法得[10])”
这都什么鬼......
参数上有const就能让函数外面放心?函数外如何能知道函数内有没有把这个指针再赋值给一个非const变量
参数上的const对接口使用者来说完全是无意义的信息
【 在 comus 的大作中提到: 】
: 我感觉老外肯定是看了函数实现,发现path并没有做++操作,所以说要加第二个const。
: 的确像你说得,一个是增加可读性,让函数外面知道path在内部没有做++操作,不会导致异常(比如外面是一个int [10]数组,传了第[9]到函数里,函数不会++指向非法得[10]),另一方面就是让维护的人修改函数实现的时候不要添加++操作,如果要++操作编译器会提示,从而让程序员认真
: 考虑。
: ...................
--
修改:xshoushoux FROM 58.35.30.*
FROM 58.35.30.*
如果用的c/c++做开发,不做参数const检查那太可怕了,除非你们都是值传递,不涉及指针,不用引用。
比如一个系统的全局参数,要作为只读参数用引用的方式传到不同函数里,怎么保证不同函数里不修改这个全局参数?只能加const吧。有工程师不小心在函数里把全局参数改了咋办,怎么查?
【 在 xshoushoux 的大作中提到: 】
: 绝大部分公司/项目都不会去检查函数参数加不加const,收益极小,只会让代码变的啰嗦
: 而且参数上的const对于接口使用者来说是完全无意义的信息,降低接口描述的可读性
: 如果一个局部变量你都要用const来保证在函数内部不被意外修改,那你可能得反思下你这个函数是不是有点太复杂了
: ...................
--
FROM 120.245.128.*
我觉得你第二个说法不对,对于函数外面来说这个写法是无意义的,就你的例子来说,如果不能访问第10个,光看这个函数声明无法保证的,调用者无法确认这个假设是安全的,因为函数实现里只是不能用这个path参数指向第10个,不代表函数不会访问第10个,最简单的,万一里面有*(path+1)呢?
所以这个写法只是方便阅读这个函数实现的人,对于调用者完全没有额外意义,不管1个const还是2个const,调用者都只能认为这个函数不会去修改path指向的那个字符串,自己传给path参数的变量在调用后,也仍然会指向原先的路径字符串
【 在 comus 的大作中提到: 】
: 我感觉老外肯定是看了函数实现,发现path并没有做++操作,所以说要加第二个const。
: 的确像你说得,一个是增加可读性,让函数外面知道path在内部没有做++操作,不会导致异常(比如外面是一个int [10]数组,传了第[9]到函数里,函数不会++指向非法得[10]),另一方面就是让维护的人修改函数实现的时候不要添加++操作,如果要++操作编译器会提示,从而让程序员认真考虑。
:
: ...................
--
FROM 121.6.158.*
这个主题说的不是第二个const吗?你究竟知不知道自己在说什么。。。
【 在 comus 的大作中提到: 】
: 如果用的c/c++做开发,不做参数const检查那太可怕了,除非你们都是值传递,不涉及指针,不用引用。
: 比如一个系统的全局参数,要作为只读参数用引用的方式传到不同函数里,怎么保证不同函数里不修改这个全局参数?只能加const吧。有工程师不小心在函数里把全局参数改了咋办,怎么查?
--
修改:xshoushoux FROM 58.35.30.*
FROM 58.35.30.*
函数里你咋把两const的指针传给其他可修改的指针变量?要不要加强制转换,如果这个工程师问都不问,想都不想就直接把两const的指针转成可修改的指针,然后去修改其中的值,那这个工程师就可以开除了吧。而且这样的问题一review就发现了。
【 在 xshoushoux 的大作中提到: 】
: “一个是增加可读性,让函数外面知道path在内部没有做++操作,不会导致异
: 常(比如外面是一个int [10]数组,传了第[9]到函数里,函数不会++指向非法得[10])”
: 这都什么鬼......
: ...................
--
FROM 120.245.128.*
n[20] 了解一下。
这人是脱离编程多久了。
【 在 comus 的大作中提到: 】
: 我感觉老外肯定是看了函数实现,发现path并没有做++操作,所以说要加第二个const。
: 的确像你说得,一个是增加可读性,让函数外面知道path在内部没有做++操作,不会导致异常(比如外面是一个int [10]数组,传了第[9]到函数里,函数不会++指向非法得[10]),另一方面就是让维护的人修改函数实现的时候不要添加++操作,如果要++操作编译器会提示,从而让程序员认真
: 考虑。
--
FROM 112.97.60.*
这个主题贴从头到尾只在讨论第二个const吧
【 在 comus 的大作中提到: 】
: 函数里你咋把两const的指针传给其他可修改的指针变量?要不要加强制转换,如果这个工程师问都不问,想都不想就直接把两const的指针转成可修改的指针,然后去修改其中的值,那这个工程师就可以开除了吧。而且这样的问题一review就发现了。
--
FROM 58.35.30.*