C26492 不要使用“const_cast”来丢弃 const 或 volatile(type.3)

C26492 Don't use `const_cast` to cast away const or volatile (type.3)

这里有一个关于不使用 const_cast 的有趣讨论,我们鼓励您使用 mutable

这是我的代码:

MENUITEMINFO sInfo{};
sInfo.cbSize = sizeof(MENUITEMINFO);
sInfo.fMask = MIIM_STRING;
sInfo.dwTypeData = const_cast<TCHAR*>(strHostLabel.GetString());
SetMenuItemInfo(pMnuSwap->GetSafeHmenu(), SwapAssignment::Host, TRUE, &sInfo);
sInfo.dwTypeData = const_cast<TCHAR*>(strCoHostLabel.GetString());
SetMenuItemInfo(pMnuSwap->GetSafeHmenu(), SwapAssignment::Cohost, TRUE, &sInfo);

代码分析告诉我:

warning C26492: Don't use const_cast to cast away const or volatile (type.3).

我知道他们说这样做是糟糕的设计,您可以调整 class 以允许它仍然是 const 但允许某些变量是可修改的。至少,我从链接的讨论中了解到这一点。

但这不适用于这种情况。


我看到了这个问题的答案 (How to convert LPCWSTR to LPWSTR),这意味着将字符串复制到另一个。有没有更简单的方法?

这就是我使用 const_cast 的原因。有没有另一种方法可以使此代码分析兼容而不会使它过于复杂?

我的代码针对 32 位和 64 位编译。这就是为什么我一直使用 TCHAR.

我认为最干净的方法是使用 GetBuffer

在某些时候你会发现确实需要非常量字符串的函数:)