将const_cast应用于字符串文字?

时间:2013-07-02 14:29:15

标签: c++ string const

我的c ++代码中需要一些预定义的常量c样式字符串文字。

我可以直接在字符串文字中使用const_cast<char *>吗?

I.E。,对于期望只读char*参数的例程,这是否合法(并且是一个好主意)?

const_cast<char*>("PIOFLAG")

或者我应该使用char *pf="PIOFLAG"并使用pf作为参数?

3 个答案:

答案 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 *(即被删除)。

但是,不允许您通过该指针修改字符串。