如何在 C++ 中处理 C char* 定义

How to handle C char* defines in C++

我现在正在将一些 C 代码移植到 C++。 C 代码使用多个定义 喜欢:

#define IPADDRESS "fd9e:21a7:a92c:2323::1"

我遇到的问题是,当我使用现在在 C++ 文件中的定义调​​用 C 函数时,我得到:

warning: ISO C++ forbids converting a string constant to ‘char*’

在这种情况下我不想修改 C 函数,因为我还是 C++ 的新手,我想知道如何处理这个问题。我想不可能告诉 C++ 将这些定义处理为 char* 而不是 string constant 所以我想知道将 string constant 转换为 [= 是否安全12=] 在这种情况下,或者是否有我应该为此使用的功能?

感谢您的帮助!

问题是字符串文字 "this is a string literal" 在 C 中是 char[] 类型,但在 C++ 中是 const char[] 类型。因此,如果您草率地编写了不使用函数参数的 const 正确性的 C 代码,那么当移植到 C++ 时,该代码将会中断。因为您不能将 const char* 传递给需要 char*.

的函数

不,“丢弃”通常是不安全的const - 这样做在 C 和 C++ 中都是未定义的行为。

解决办法是修复原来的C代码。不使用 const 正确性是不正确的设计,在 C 和 C++ 中都是如此。如果 C++ 编译器支持复合文字,那么一种可能的修复方法可能是:

#define IPADDRESS (char[]){"fd9e:21a7:a92c:2323::1"}