编译标准库类型

Compiling standard library types

本文关键字:类型 标准 编译      更新时间:2023-10-16

我本以为以下代码会产生错误:

#include <iostream>
using namespace std;
#include <map>
#include <string>
int main(){
map<string,string> x; 
x["10"]=20;
cout <<x["10"]<<endl;
}

因为分配的值不是字符串类型。但是,没有错误。但是输出不正确——没有打印任何可见的内容。但是,如果我用引号括起20,那么输出就可以了。有人能解释吗

std::string有三个版本的operator=(C++03(。其中一个需要一个字符。如果您呈现s = 65;,它将int作为char,并调用string& operator= (char c);版本。在这种情况下,std::string创建单个字符串。

C++03中的3个版本是:

string& operator= (const string& str);
string& operator= (const char* s);
string& operator= (char c);

对于当前的标准,我们有更多的内容,请参阅std::string::operator=

示例:打印出"A",因为65是ASCII中的大写A

int main()
{   
std::string s;
s = 65; 
std::cout << s << std::endl;
}

你的观察结果与地图的结合使用无关,所以我将其简化为std::string的使用。