C++ 如何将常量值转换为非常量变量?
我有以下代码:C++ 如何将常量值转换为非常量变量?,c++,C++,我有以下代码: PARAMS Params; Params.pwchFileName = wide.c_str() ; 但我有一个错误: a value of type "const wchar_t *" cannot be assigned to an entity of type "wchar_t *" 如何完成此任务?您可以使用以下命令强制转换它: Params.pwchFileName = const_cast<wchar_t*>( wide.c_st
PARAMS Params;
Params.pwchFileName = wide.c_str() ;
但我有一个错误:
a value of type "const wchar_t *" cannot be assigned to an entity of type "wchar_t *"
如何完成此任务?您可以使用以下命令强制转换它:
Params.pwchFileName = const_cast<wchar_t*>( wide.c_str() );
Params.pwcfilename=const_cast(wide.c_str());
但当你别无选择时,请使用const_cast
小心,写入该对象会调用未定义的行为。您可以使用以下命令强制转换它:
Params.pwchFileName = const_cast<wchar_t*>( wide.c_str() );
Params.pwcfilename=const_cast(wide.c_str());
但当你别无选择时,请使用const_cast
小心,写入该对象会调用未定义的行为。从常量值生成在所有上下文中都安全的非常量值的唯一方法是创建一个副本:
Params.pwchFileName = new char[wide.size()+1];
strcpy(Params.pwchFileName, wide.c_str());
...
// when you are done with the copy, delete it:
delete[] Params.pwchFileName;
从常量值生成非常量值的唯一方法是创建一个副本,该副本在所有情况下都是安全的:
Params.pwchFileName = new char[wide.size()+1];
strcpy(Params.pwchFileName, wide.c_str());
...
// when you are done with the copy, delete it:
delete[] Params.pwchFileName;
您可以非常小心地使用
const\u cast
:
const_cast(wide.c_str())代码>
但是这里还有其他问题:如果wide
是std::string
,那么c_str()
的结果只有在wide
在范围内且未以任何方式更改时才有效。即使您遵守这一点,PARAMS
的使用者也可以修改字符串缓冲区,这会给您带来未定义的行为
这里最好的做法是使用strcpy来获取字符串缓冲区的深度副本,记住在使用完该缓冲区后删除该缓冲区。您可以非常小心地使用const_cast
:
const_cast(wide.c_str())代码>
但是这里还有其他问题:如果wide
是std::string
,那么c_str()
的结果只有在wide
在范围内且未以任何方式更改时才有效。即使您遵守这一点,PARAMS
的使用者也可以修改字符串缓冲区,这会给您带来未定义的行为
这里要做的最好的事情是使用strcpy来获取字符串缓冲区的深度副本,记住在使用完该缓冲区后删除它