从字符串const转换为不推荐的转换.到wchar_t*

Zac*_*Zac 6 c++ wchar-t deprecated

你好我有一个泵类需要使用一个成员变量,该变量是一个指向包含端口地址的wchar_t数组的指针,即:"com9".

问题是,当我在构造函数中初始化此变量时,我的编译器会标记折旧的转换警告.

pump::pump(){
   this->portNumber = L"com9";}
Run Code Online (Sandbox Code Playgroud)

这工作正常但每次编译时的警告都很烦人,让我觉得我做错了什么.

我尝试创建一个数组,然后像这样设置成员变量:

pump::pump(){
   wchar_t port[] = L"com9";
   this->portNumber = port;}
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,这使我的portNumber指向'F'.

显然,我的另一个概念问题.

感谢您对我的无聊问题的帮助.

编辑:

作为请求,portNumber的定义是:

    class pump
{
private:
   wchar_t* portNumber;
}
Run Code Online (Sandbox Code Playgroud)

感谢答案,它现在已更改为:

    class pump
{
private:
   const wchar_t* portNumber;
}
Run Code Online (Sandbox Code Playgroud)

GMa*_*ckG 13

如果portNumberwchar_t*,它应该是const wchar_t*.

字符串文字是不可变的,因此元素是const.存在从字符串文字到非常量指针的不推荐的转换,但这是危险的.进行更改,以确保类型安全,不使用不安全的转换.

第二个失败是因为您指向局部变量的内容.当构造函数完成时,变量消失,你指向一个无效的位置.使用它会导致未定义的行为.

最后,使用初始化列表:

pump::pump() :
portNumber(L"com9")
{}
Run Code Online (Sandbox Code Playgroud)

初始化列表是初始化,构造函数是完成构造.(此外,this->对几乎所有的C++人员来说都是丑陋的;它不是很好而且多余.)