问题描述
当使用winapi HWND并返回wstring时,我有一个函数。
onSubmit(e){
let yourIncorrectAnswers = Object.values(this.state.incorrect_answers);
})
}
,我收到以下错误消息:
std::wstring utility::winapi::window_class(HWND hwnd) {
int title_length = 20;
std::wstring class_name;
class_name.resize(title_length,'\0');
GetClassName(hwnd,const_cast<LPWSTR>(class_name.c_str()),title_length);
class_name.erase(std::remove_if(class_name.begin(),class_name.end(),[](const char &x){return x == '\0';}),class_name.end());
return class_name;
}
此错误是什么意思?
解决方法
class_name
被声明为std::wstring
。这是一个wchar_t
值的字符串,但是您的lambda参数的类型为const char &
,它的范围更窄。警告告诉您该值可能会被截断。这可能会导致测试x == '\0'
在应注意的情况下评估为真。这是编译器试图告诉您的:
warning C4244: 'argument': conversion from 'wchar_t' to 'const char',possible loss of data
作为旁注,没有理由通过引用接受数字参数。在这种情况下,很可能会导致组装相同,因为几乎可以肯定会内联lambda,但不使用引用会更干净。
要解决此警告,请更改lambda以接受wchar_t
:
[](wchar_t x){return x == '\0';})
从C ++ 14开始,您还可以使用auto
作为参数的类型:
[](auto x){return x == '\0';})