我在Visual Studio 2005中使用C ++,并且我收到了许多读取
的警告potentially uninitialized local variable 'hr' used
其中hr定义为
HRESULT hr;
初始化HRESULT的正确方法是什么?
答案 0 :(得分:4)
选择错误HRESULT
并使用该值,因此HRESULT hr = E_UNEXPECTED
或HRESULT hr = E_FAIL
将是我期待的好选择。
答案 1 :(得分:2)
我会用:
HRESULT hr = NOERROR;
您也可以使用
HRESULT hr = S_OK;
两者都设置为0。
答案 2 :(得分:2)
取决于您想要的聊天:
E_FAIL
S_OK
hr
值无关紧要?使用E_UNEXPECTED
答案 3 :(得分:1)
不要通过初始化变量来抑制警告。警告告诉您代码是坏的。修复代码。
一些有用的技巧:
HRESULT
翻译为C ++例外。从HRESULT
转换为异常可以通过使用">>
throwing pattern"非常简洁且几乎可读,就像(尽管此示例不涉及HRESULT
s它表明该模式已推广处理大多数C风格的方案)......
std::ostream& operator<<( std::ostream& stream, wchar_t const s[] )
{
Size const nBytes = wcstombs( 0, s, 0 );
(nBytes >= 0)
|| throwX( "wcstombs failed to deduce buffer size" );
Size const bufSize = nBytes + 1;
std::vector< char > buf( bufSize );
// The count of bytes written does not include terminating nullbyte.
wcstombs( &buf[0], s, bufSize )
>> Accept< IsNonNegative >()
|| throwX( "wcstombs failed to convert string" );
return (stream << &buf[0]);
}
所需的支持定义根本不复杂,例如像
inline bool throwX( std::string const& s )
{
throw Failure( s );
}
template< class Predicate >
struct Accept: Predicate
{};
template< class Type, class Predicate >
inline bool operator>>( Type const& v, Accept< Predicate > const& isOK )
{
return isOK( v );
}
struct IsNonNegative
{
template< class Type >
bool operator()( Type const& v ) const { return (v >= 0); }
};