c++ - 在 MSVC++2010 中禁用警告

标签 c++ visual-studio-2010 visual-c++ warnings

我有以下代码:

/** Stupidly copies unicode chars into normal chars. */
std::string wstring2string(__in  const std::wstring& s)
{
    std::string temp(s.length(), ' ');
#pragma warning(push)
#pragma warning(disable: 4244) // possible loss of data
    std::copy(s.begin(), s.end(), temp.begin());
#pragma warning(pop)
    return temp;
}

我的编译器仍然显示警告 C4244:

1>c:\program files\microsoft visual studio 10.0\vc\include\xutility(2144): warning C4244: '=': Konvertierung von 'const wchar_t' in 'char', möglicher Datenverlust
1>          c:\program files\microsoft visual studio 10.0\vc\include\xutility(2165): Siehe Verweis auf die Instanziierung der gerade kompilierten Funktions-template "_OutIt std::_Copy_impl<_InIt,_OutIt>(_InIt,_InIt,_OutIt,std::_Nonscalar_ptr_iterator_tag)".

(英文:“const wchar_tchar的转换,可能会丢失数据,参见刚才编译的函数模板的实例化引用……”)。

如何禁用它?!

最佳答案

要消除此警告,您需要在包含该函数的头文件周围添加 #pragma 警告...。在您的情况下,这是 xutility。它包含在多个其他文件中。所以会很难找到。不过你可以这样试试。

#pragma warning(push)
#pragma warning(disable: 4244) // possible loss of data
#include <xutility>
#pragma warning(pop)
Your includes go here...
std::string wstring2string(__in  const std::wstring& s)
{
    std::string temp(s.length(), ' ');
    std::copy(s.begin(), s.end(), temp.begin());
    return temp;
}

除此之外,我建议进行正确的转换。看看ICU例如或至少使用标准中的功能。例如。 mbstowcs

关于c++ - 在 MSVC++2010 中禁用警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6440614/

相关文章:

batch-file - 查找是否从注册表或文件系统安装了 Visual Studio 2010 SP1 (VC10) x64

c++ - 这段代码有什么问题..关于 strncat

c++ - DEFINE 宏是否适用于所有平台?

android - 选中 CCMenuItemToggle cocos2d-x

c++ - 如何将 "\"用作字符串中的文本而非命令

python - 将 Boost.Python 与 g++ 的问题联系起来

visual-studio-2010 - 调试单元测试时,Visual Studio不会调试吗?

c# - 在 C# 中对具有空值的数据库进行选择时处理空白字符串 ("") 文本框值

c++ - 如何开始使用 Visual C++ 编写 DLL?

c++ - Linux 共享库