我有这样的功能:
void Test(std::wstring test1)
{
cout << test1.c_str();
}
Run Code Online (Sandbox Code Playgroud)
当我这样称呼时:
Test(NULL);
Run Code Online (Sandbox Code Playgroud)
我得到运行时异常,如"无效句柄",整个程序崩溃.我不能对参数'test1'进行空检查,因为编译器说它不能为空.我想首先阻止NULL传递,或者有办法在运行时检查NULL.我怎么解决这个问题?
不幸的是,在这种情况下,您只需编写正确的代码:空指针可以隐式转换为wstring(通过C字符串构造函数),并且该构造函数要求C字符串指针为非null.
你必须在调用之前进行空检查Test.你可以实现一个重载来帮助解决这个问题:
void Test(const wchar_t* test1)
{
if(test1) Test(std::wstring(test1));
}
Run Code Online (Sandbox Code Playgroud)
请注意,这可能会隐藏问题,您可能希望在重载Test函数中断言和/或只是修复调用代码,因此它首先不会传入无效字符串.