cpp将int赋给字符串shenanigans

时间:2012-11-25 01:32:03

标签: c++ string char

我知道错误在以下代码中的位置,第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而没有任何警告。原因在于:

Why does C++ allow an integer to be assigned to a string?

这很好但是,我注意到字符串不是空的,并且长度为1,正如char所期望的那样。但是,如果我尝试在网上打印出98,我就会

Error: String length < 2 :><:

注意标记之间没有打印任何内容&gt;

1 个答案:

答案 0 :(得分:1)

您没有告诉我们实际值是多少,但它可能是ASCII中不可打印的字符。

这是字符串的一种奇怪用法。