4

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

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

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

const_cast<char*>("PIOFLAG")

还是我应该只使用char *pf="PIOFLAG"和使用pf作为论点?

4

3 回答 3

4

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

于 2013-07-02T14:36:24.723 回答
1

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

抛弃固有const对象的常量性并对其进行修改最终会给您带来未定义的行为,因此这并不是一个好主意。即使您不打算修改对象,它仍然不是一个好主意,因为您破坏了 const 正确性的全部目的,并将您的代码暴露给他人以及您自己的突发奇想和幻想。

char *pf="PIOFLAG";

这种用法在 C++ 中已弃用,您必须使用一段const char *时间来声明字符串文字。

于 2013-07-02T14:30:28.553 回答
0

您可以通过这种方式 const_cast 字符串文字,但实际上并不需要它,因为存在到 char* 的隐式转换(已弃用)。

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

于 2013-07-02T14:33:11.000 回答