CPP 将 int 分配给字符串恶作剧
cpp assign int to string shenanigans
我知道以下代码中的错误在哪里,第 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 是一个枚举,由于严格的类型,我预计这里会有一些东西发生,但不幸的是,由于它确实是一个整数,因此根本没有警告。原因在这里找到:
为什么C++允许将整数分配给字符串?
这很好,但是,我注意到字符串不是空的,并且长度为 1,就像字符所期望的那样。但是,如果我尝试在线打印出来 98 我会得到
Error: String length < 2 :><:
请注意,标记之间没有打印任何内容>
您没有告诉我们实际值是多少,但它可能是 ASCII 中不可打印的字符。
这是字符串的一种相当奇怪的用法。