gpt4 book ai didi

c++ - 在 C++ 中修复类型转换警告的最佳方法

转载 作者:可可西里 更新时间:2023-11-01 14:40:35 28 4
gpt4 key购买 nike

所以,当我收到这样的警告时,我一直不确定该怎么办,所以我需要其他专业程序员的建议。当我收到此类警告(不是错误)时

warning C4267: '=': conversion from 'size_t' to 'ULONG', possible loss of data

(省略其他上下文代码)

wchar_t pszName[CREDUI_MAX_USERNAME_LENGTH + 1] = L"user";
wchar_t pszPwd[CREDUI_MAX_PASSWORD_LENGTH + 1] = L"password";

// ..

COAUTHIDENTITY authIdent;

// ...

memset(&authIdent, 0, sizeof(COAUTHIDENTITY));
authIdent.PasswordLength = wcslen(pszPwd);
authIdent.UserLength = wcslen(pszName);

问题显然是 wcslen() 返回一个 size_t 而 authIdent.PasswordLength 是一个 ULONG。处理此类警告的最佳方法是什么?他们希望我使用 winapi 函数来代替 wcslen() 吗?

编辑:感谢大家的精彩回复!

最佳答案

每个编译器警告都需要根据具体情况进行处理。

由于 ULONG 是 32 位无符号的,而 std::size_t 是 64 位无符号的,因此您会在您的平台上收到此警告。

但考虑到 (1) 您的字符串不太可能比 ULONG 长,并且 (2) 两种无符号类型之间的转换总是很好-定义,我会做务实的事情并使用 static_cast:

static_cast<ULONG>(wcslen(pszPwd))

关于c++ - 在 C++ 中修复类型转换警告的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46792956/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com