cpp присваивает int строковым махинациям

Я знаю, где ошибка в следующем коде, строка 90, я просто не могу понять, почему она ведет себя так, как она:

 83   string
84   getStringId(TokenType toktype)
85   {
86     map<TokenType, string>::iterator pos;
87     pos = TokenTypeMap.find(toktype);
88     string str;
89     if(pos != TokenTypeMap.end()) {
90       str = pos->first;
91     }
92     if(str.empty()) {
93       cerr << "Error: Invalid TokenType: " << toktype << endl;
94       exit(EXIT_FAILURE);
95     }
96     /* The following if block is only here for debugging */
97     if(str.length() == 1) {
98       cerr << "Error: String length == 1 :>" << str << "<:"<< endl;
99       exit(EXIT_FAILURE);
100     }
101     return str;
102   }

В строке 90 я назначаю TokenType для строки. Так как TokenType является перечислением, я ожидал, что здесь что-то пойдет не так из-за строгой типизации, но, к сожалению, нет никакого предупреждения, потому что это действительно int. Причина этого была найдена здесь:

Почему C ++ позволяет целому числу быть назначенным на строку?

Это нормально, но я заметил, что строка не пустая и имеет длину 1, как и следовало ожидать с символом. Однако, если я попытаюсь распечатать его онлайн, я получу

Error: String length < 2 :><:

Обратите внимание, что между маркерами ничего не напечатано>

1

Решение

Вы не сказали нам, что было на самом деле, но это, вероятно, непечатный символ в ASCII.

Это довольно странное использование строк.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector