这些老式演员怎么办?

bur*_*bur 6 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);
Run Code Online (Sandbox Code Playgroud)

和:

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

RegCloseKey(hKey);
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助 :)

Swo*_*ish 3

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

(LPBYTE)&result: LPBYTE(&result)有效,但同样,我不知道它是否等效。

是的,是一样的。

(const BYTE*)&value: reinterpret_cast<const BYTE*>(&value)有效,但又是同样的事情。

又一样。

  • 也许值得一提的是,“reinterpret_cast”可能会消除警告,但应将其视为危险信号,就像 c 风格转换一样(当没有其他 x_cast 应用时,它基本上是 c 风格转换的替代品) (2认同)
  • `LPBYTE(&amp;result)` 不是 C 风格的转换。它是 C++ 特有的,在标准 C 中无效。但是,“_cast”转换在 C++ 中通常被认为是更好的选择。 (2认同)