我有我的代碼的循環使用std::basic_string<HANDLE>
,然後等待它是這樣的:我可以在std :: basic_string中使用非字符類型的東西嗎?
DWORD dwWaitResult = WaitForMultipleObjects((DWORD)handles.size(),
handles.data(),
FALSE, POLL_INTERVAL_MS);
它工作罰款,但是當我打開/ W4和/分析時,Visual C++ 2008具有以下(削減和包裹爲簡潔起見)警告說:
iosfwd(266) : warning C6001: Using uninitialized memory '*_First'
iosfwd(262) : while compiling class template member function
'HANDLE *std::char_traits<_Elem>::assign(_Elem *,size_t,_Elem)'
with [ _Elem=HANDLE ]
xstring(2155) : see reference to class template instantiation
'std::char_traits<_Elem>' being compiled
with [ _Elem=HANDLE ]
xstring(2148) : while compiling class template member function
'void std::basic_string<_Elem>::_Tidy(bool,unsigned int)'
with [ _Elem=HANDLE ]
.\MyCode.cpp(231) : see reference to class template instantiation
'std::basic_string<_Elem>' being compiled
with [ _Elem=HANDLE ]
iosfwd(222) : warning C6001: Using uninitialized memory '*_First1'
iosfwd(216) : while compiling class template member function
'HANDLE *std::char_traits<_Elem>::_Copy_s
(_Elem *,size_t,const _Elem *,size_t)'
with [ _Elem=HANDLE ]
問題:
- 是合法的使用std :: basic_string的w^ith不是簡單的字符類型(即
char
或wchar_t
)? - 如果是這樣,我該怎麼辦才能擺脫這些警告?回答
#pragma warning(disable)
需要證明。 - 如果不是,爲什麼不呢?我應該用什麼來代替?
爲了記住Boost已經出來,並且我們僅限於Visual C++ 2008中的STL實現, TR1的Visual C++位是允許的。
只是爲了讓我知道,爲什麼你使用一串手柄,而不是一個向量? – catchmeifyoutry
對WaitForMultipleObjects的調用要求句柄在內存中連續。當我寫這個代碼的時候(幾年前),我不知道載體是連續的。 –