我有一个无法删除的警告......它告诉我“不推荐从字符串常量到 char* 的转换”。它抱怨的代码如下:
class THREE_DATA_4_COMPUTE
{
public:
THREE_DATA_4_COMPUTE(const QString &cn, char* umn = "", const QString &un = (const QString)"")
{
this->curveName = cn;
this->unitModuleName = umn;
this->unitName = un;
};
QString curveName;
char* unitModuleName;
QString unitName;
protected:
THREE_DATA_4_COMPUTE(){};
};
我将其称为如下,仅传递 1 个参数(因此我需要默认值):
THREE_DATA_4_COMPUTE *aux = new THREE_DATA_4_COMPUTE(this->getRmft());
怎么了?。我使用 c++、Qt 4.8 和 linux。
这两个错误:
""
不是一个字符串变量而是一个常量,就像"hola"
这样一个字符串应该只从一个常量指针指向QString
从字符串构建,因为您已经有了它的构造函数该构造函数应该是什么样子?
尝试此签名时您可能会遇到的一个问题是
umn
它现在不兼容unitModuleName
,因为一个兼容,const char*
另一个兼容char*
。在我看来,除非绝对必要,否则我会转换unitModuleName
为QString
... 尽管更改unitModuleName
为const char*
... 由于您没有显示该类的实现,因此不清楚该值是否可以更改。当然,由于可以自由放置更长的变量名,为了便于阅读,我几乎建议您使变量名更具描述性。
问题。
deprecated conversion from string constant to char*
当试图将类型为指向的常量指针的文本文字存储在指向指针char
的变量中时,通常会发出警报char
(不是常量)。在尝试将常量
char
指针存储到char
非常量指针时,您也可能会遇到此警报。例子。
在上面的代码中,我们看到文本字面量 (
"Patatas fritas, que ricas!"
) 如何存储在char
没有限定符的指针类型变量中const
。文本字面量的类型是const char[27]
(类型为 27 个元素的常量数组char
),这种类型的数组可以隐式转换为指向char
;的常量指针。将其传递给非常量指针时,会出现警报。要更正此问题,请将限定符添加const
到参数中:const char *
如果函数的返回是并且存储在指向char
没有限定符的指针变量中,也会发生这种情况const
:为什么会发生?:与c的兼容性
const char *
a的隐式转换char *
是 C++ 中唯一允许的这种转换,它的存在是为了向后兼容 C。在 C 语言中,文本文字和限定符的语义与
const
C++ 中的不同。在 C 中,文本字面量是非常量数组,char
而在 C++ 中,文本字面量是常量数组char
。为了在 C 中允许与在 C++ 中相同的语义,此转换被标记为警报而不是错误。因此,在 C 中允许将文本文字传递给函数:
但是,
const
在 C++ 中明确禁止从合格数据到不合格数据的转换:当我们得到一个不推荐使用
char
的警报时,我们得到一个错误。如果您使用较新的 C++ 编译器,您将收到错误而不是警报。int