我的c ++代码中需要一些预定义的常量c样式字符串文字。
我可以直接在字符串文字中使用const_cast<char *>
吗?
I.E。,对于期望只读char*
参数的例程,这是否合法(并且是一个好主意)?
const_cast<char*>("PIOFLAG")
或者我应该使用char *pf="PIOFLAG"
并使用pf
作为参数?
答案 0 :(得分:4)
如果字符串用于采用char *
但实际上没有修改字符串本身的API,那么const_cast<char *>("SOME STRING")
就可以了。理想情况下,您需要修改API以获得const
参数,这样可以更容易使用,并反映现实。
答案 1 :(得分:0)
都不是。您只需使用自己的内存分配创建另一个char *
并将字符串复制到其中。
抛弃一个固有的const
对象的常量并修改它最终会给你未定义的行为,所以这不是一个好主意。即使你不打算修改对象,它仍然不是一个好主意,因为你打败了const正确性的全部目的,并将你的代码暴露给他人以及你自己的想法和幻想。
char *pf="PIOFLAG";
在C ++中不推荐使用此用法,在声明字符串文字时必须使用const char *
。
答案 2 :(得分:0)
你可以通过这种方式const_cast字符串文字,但不需要它,因为有一个隐含的转换为char *(即被删除)。
但是,不允许您通过该指针修改字符串。