c++ - 在现代 C++ 应用程序中使用 Win32 代码时,是否应该使用正确的转换?

标签 c++ winapi visual-c++

例如,在 MSDN 文档中随处可见以下强制转换:

(LPTSTR)&lpMsgBuf

我是否应该将其转换为:

static_cast<LPTSTR>(&lpMsgBuf);

或者我是否应该保留所有惯用的 C 风格 Win32 部分,因为它们通常在文档中找到,并为我的其余代码保留更惯用的 C++ 样式/用法?

最佳答案

引入新样式强制转换是有原因的:它们更安全、更具解释性/ self 注释、更易于查看并且更易于 grep 查找。

所以使用它们。

更详细的解释,我们的意思是你不能只是转换为某物,你必须说为什么你正在转换(我在继承层次结构(dynamic_cast)中转换,我的转换是实现定义的并且可能不可移植(reinterpret_cast),我正在抛弃常量(const_cast)等)。

它们故意又长又丑,以便强制转换在读者面前跳出来(并阻止使用过多强制转换的编程风格)。

它们更安全,因为,例如,你不能在没有明确这样做的情况下放弃常量。

关于c++ - 在现代 C++ 应用程序中使用 Win32 代码时,是否应该使用正确的转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/791953/

相关文章:

c++ - Windows 编译器上的 timespec

c++ - 将字符数组附加到字符串 C++

c++ - 如何在函数外部定义函数嵌套类的实现?

c - SetWindowLongPtr 返回 ERROR_ACCESS_DENIED

c# - 找不到 Microsoft.Win32

c++ - 存在间接路由时通过强制转换

c++ - 如何将 std::string (YYYY-MM-DD) 解析为 COleDateTime 对象?

c++ - 自旋控制 GetPos() 值被延迟

c++ - 如何正确打印 __FILE__ 扩展到的字符串?

c++ - 打印所有继承的类成员变量和方法