将const_cast应用于字符串文字

Apply const_cast to a string literal?

本文关键字:字符串 文字 应用于 cast const      更新时间:2023-10-16

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

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

也就是说,对于一个期望只读char*参数的例程来说,这合法吗(这是个好主意吗)?

const_cast<char*>("PIOFLAG")

还是应该只使用char *pf="PIOFLAG"并使用pf作为参数?

如果字符串在API中使用,该API使用char *,但实际上并没有修改字符串本身,那么const_cast<char *>("SOME STRING")就可以了。理想情况下,您应该修改API,使其具有const参数,这将使其更易于使用,并反映现实。

两者都没有。您只需创建另一个具有自己内存分配的char *,并将字符串复制到其中。

去掉一个固有const对象的常量并对其进行修改最终会产生Undefined Behavior,所以这不是一个好主意。即使你不打算修改对象,这仍然不是一个好主意,因为你破坏了const正确性的整个目的,并将你的代码暴露在他人和你自己的奇思妙想中。

char *pf="PIOFLAG";

C++中不赞成使用这种用法,在声明字符串文字时必须使用const char *

您可以用这种方式const_cast字符串文本,但实际上并不需要它,因为有一个到char*的隐式转换(不推荐)。

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