[问题] strtod 的引数设计

楼主: noodleT (面T)   2016-04-13 20:29:07
大家好,
double strtod (const char* str,char** endptr);
strtod 可以用来解析浮点数,并且得到解析完后“光标位置”
方便我们再做其它字串处理。
http://www.cplusplus.com/reference/cstdlib/strtod/
如同上面网址中的 d2 = strtod (pEnd, NULL);
而它只是要指到光标位置,
并不会修改内容,例如 **endptr = 'a'
为什么 endptr 不加 const 修饰?
加 const 修饰,是可以通过编译的
http://ideone.com/o2uhO8
作者: LiloHuang (十年一刻)   2016-04-13 21:39:00
设计上是为了方便起见,假使真的想要修改 **endptr比如说 **endptr = '\0'; 但也暴露著对 string literal修改的风险
楼主: noodleT (面T)   2016-04-13 21:54:00
但第一个引数 *str 已经加了 const , **endptr 指向它,照道理来说不是不能将常数指标赋予给普通指标?
作者: LiloHuang (十年一刻)   2016-04-13 22:37:00
因为第一个引数可能本体不是 const char * 而是 char *刚找了一下 SO 上也有类似的讨论 http://goo.gl/SEuTPzhttp://goo.gl/hfGz4u 讨论串看完的结论就是折衷设计

Links booklink

Contact Us: admin [ a t ] ucptt.com