为什么下面的代码没有给出错误,也没有关于隐式转换的任何类型的警告?
std::wstring str = L"hi";
if(str[0] == 'h')
cout<<"strange"<<endl;
正确的正常代码是:
std::wstring str = L"hi";
if(str[0] == L'h')
cout<<"strange"<<endl;
编译器:visual studio 2005
警告级别:级别4(最高)
答案 0 :(得分:7)
由于比较有效,因此不会发出警告。一般来说,您总是可以比较整数类型,只需根据需要升级到更广泛的类型。
我很确定一些编译器会发出警告。你在用哪一个? (在任何情况下,警告都是特定于编译器的,并且他们不需要警告这个或其他任何事情)
答案 1 :(得分:2)
为什么以下代码不会出错?
不是因为C ++允许隐式转换吗?例如,以下内容也不合法:
if (str[0] == 104) //C++ allows various implicit type conversions
...也没有关于隐式转换的任何类型的警告?
该问题是特定于编译器的:您使用的编译器是什么?可能有一个编译器选项会影响从编译器获得的警告类型。
答案 2 :(得分:0)
很难确定为什么编译器不会发出警告。他们可能出于任何原因这样做,并且在代码可疑时应该这样做。但是,错误是错误的,因为代码在技术上是正确的。
在这种情况下,我的假设是编译器不会发出警告,因为编译器使用Unicode wchar_t
和ISO-8859-1 char。 Unicode子集U + 0000到U + 00FF等于ISO 8859-1字符0-FF。因此,每个char具有与其对应的wchar_t相同的数值。因此,wchar_t('a')==L'a'
。