c++ - 如何处理这些旧式类型转换?

标签 c++ casting

我收到了一些“使用旧式转换”的警告,我想将其删除,但我对此了解不够。

编辑: HKEY_CURRENT_USER确实是在 WinAPI 中定义的,所以我将不理会它。

(LPBYTE)&result : LPBYTE(&result)reinterpret_cast<LPBYTE>(&result)工作,但我不知道两者是否等效。 那么我应该使用这三个中的哪一个?

(const BYTE*)&value : reinterpret_cast<const BYTE*>(&value)有效,但又是同样的事情。 那么我应该使用这两者中的哪一个?

更多上下文:

HKEY hKey;
std::string sResult = "";
if(regOpenKey(KEY_READ, &hKey))
{
    DWORD size=1024, type = REG_SZ;
    wchar_t result[MAX_PATH];
    if(RegQueryValueEx(hKey, key, nullptr, &type, (LPBYTE)&result, &size) == ERROR_SUCCESS)
        sResult = str_narrow(result);
}

RegCloseKey(hKey);

和:

HKEY hKey;
if(regOpenKey(KEY_ALL_ACCESS, &hKey))
{
    DWORD value = 1;
    RegSetValueEx(hKey, key, 0, REG_DWORD, (const BYTE*)&value, sizeof(value));
}

RegCloseKey(hKey);

感谢您的帮助:)

最佳答案

HKEY_CURRENT_USER已在 WinAPI 中定义,因此不用管它。它可能会在没有警告的情况下发生变化(虽然不太可能,但有可能)。

(LPBYTE)&result: LPBYTE(&result) works, but again, I have no idea if it's equivalent.

是的,是一样的。

(const BYTE*)&value: reinterpret_cast<const BYTE*>(&value) works, but same thing again.

还是一样。

关于c++ - 如何处理这些旧式类型转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52513830/

相关文章:

c++ - GCC 4.2.x 是否创建构造函数?

c++ - 基于 SFINAE 的运算符跨命名空间重载

c++ - 使用 std::min_element() 时保存函数计算

c# - 实例化一个内部类并将其转换为给定类型

java - 什么是未经检查的类型转换,我该如何检查?

c++ - 避免对 volatile 和非 volatile 成员函数进行代码重复

c# - 正在将 int 转换为 double 并返回安全

C++ 将 bool 转换为 int - 标准

c - 出于什么原因 printf 不能正确显示 float ?

c++ - 是否有一个函数接受 2 个指针并返回一个非 NULL 的指针?