我的 c++ 代码中需要一些预定义的常量 c 样式字符串文字。
我可以const_cast<char *>
直接在字符串文字上使用吗?
IE,对于期望只读char*
参数的例程来说,这是否合法(这是一个好主意)?
const_cast<char*>("PIOFLAG")
还是我应该只使用char *pf="PIOFLAG"
和使用pf
作为论点?
如果在 API 中使用了字符串,char *
但实际上并没有修改字符串本身,那么const_cast<char *>("SOME STRING")
就可以了。理想情况下,您应该修改 API 以使用const
参数,这将使其更易于使用并反映现实。
两者都不。您只需char *
使用自己的内存分配创建另一个并将字符串复制到其中。
抛弃固有const
对象的常量性并对其进行修改最终会给您带来未定义的行为,因此这并不是一个好主意。即使您不打算修改对象,它仍然不是一个好主意,因为您破坏了 const 正确性的全部目的,并将您的代码暴露给他人以及您自己的突发奇想和幻想。
char *pf="PIOFLAG";
这种用法在 C++ 中已弃用,您必须使用一段const char *
时间来声明字符串文字。
您可以通过这种方式 const_cast 字符串文字,但实际上并不需要它,因为存在到 char* 的隐式转换(已弃用)。
但是,您不能通过该指针修改字符串。