小编典典

C++ 不推荐将字符串常量转换为 'char*'

all

我有一堂课private char str[256];

为此我有一个显式的构造函数:

explicit myClass(const char *func)
{
    strcpy(str,func);
}

我称之为:

myClass obj("example");

当我编译它时,我收到以下警告:

不推荐将字符串常量转换为 ‘char*’

为什么会这样?


阅读 81

收藏
2022-09-02

共1个答案

小编典典

这是您在遇到如下情况时看到的错误消息:

char* pointer_to_nonconst = "string literal";

为什么?好吧,C 和 C 在字符串文字的类型上有所不同。在 C 中,类型是 char 数组,而在 C 中,类型是 char 常量
数组。在任何情况下,您都不允许更改字符串文字的字符,因此 C 中的 const
并不是真正的限制,而是更多的类型安全。出于安全原因,如果没有明确的强制转换,从const char*to的转换char*通常是不可能的。但是为了与
C 向后兼容,C
语言仍然允许将字符串文字分配给 achar*并警告您不推荐使用此转换。

因此,为了 const
的正确性,您在程序中缺少一个或多个consts。但是您向我们展示的代码不是问题,因为它没有进行这种已弃用的转换。警告一定来自其他地方。

2022-09-02