Вот тестовый пример:
#include <iostream>
int main()
{
std::cout << "test with std::string" << std::endl;
std::string str = "123";
str[ 0 ] = 0xfe;
switch( s[ 0 ] )
{
case 0xfe:
// Предполагалось, что окажемся здесь...
std::cout << "case 0xfe" << std::endl;
break;
default:
// ... но попали сюда((
std::cout << "default s[ 0 ]" << std::endl;
};
std::cout << "test simple char" << std::endl;
char ch = 0xfe;
switch( ch )
{
case 0xfe:
std::cout << "case 0xfe" << std::endl;
break;
default:
std::cout << "default" << std::endl;
};
return( 0 );
}
В результате получаем:
test with std::string
default s[ 0 ]
test simple char
case 0xfe
Почему в первом варианте попадаем в default?
p.s.: Компилятор gcc version 4.1.1 20060629