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
如果portNumber是wchar_t*,它应该是const wchar_t*.
字符串文字是不可变的,因此元素是const.存在从字符串文字到非常量指针的不推荐的转换,但这是危险的.进行更改,以确保类型安全,不使用不安全的转换.
第二个失败是因为您指向局部变量的内容.当构造函数完成时,变量消失,你指向一个无效的位置.使用它会导致未定义的行为.
最后,使用初始化列表:
pump::pump() :
portNumber(L"com9")
{}
Run Code Online (Sandbox Code Playgroud)
初始化列表是初始化,构造函数是完成构造.(此外,this->对几乎所有的C++人员来说都是丑陋的;它不是很好而且多余.)