将const_cast应用于字符串文字
Apply const_cast to a string literal?
我的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*的隐式转换(不推荐)。
但是,您不允许通过该指针修改字符串。
相关文章:
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 如何使用字符串文字作为宏参数
- 有没有办法从非C/C++文件中读取C++原始字符串文字的内容
- 构造<int>具有 2 个字符串文字的向量
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- 方便地对C++中的所有字符串文字进行模糊处理
- 比较 std::string 和 C 样式字符串文字
- 如何从char16_t字符串文字中读取双精度?
- 如果我在块中编写字符串文字,是否会从数据部分复制整个字符串数据?
- C++ 不能在cout中使用向量和字符串文字
- 为什么必须将 const 添加到 constexpr 中才能进行字符串文字声明?
- C++:Unicode 字符串文字的可移植性
- 返回空字符串文字 VS. 返回空点 - 它们是一样的吗?
- 确保字符指针始终指向相同的字符串文字
- 如何按照 Google C++风格指南连接字符串文字?
- 通过 constexpr 中的 'const char *' glvalue 访问字符串文字的值会出错
- 字符串文字到 char 数组的转换如何在C++中实际工作
- 另一个字符串文字,UDL 迷宫
- strlen 是否针对字符串文字进行了优化?
- 用户定义的字符串文字为字符串null终止