Kir*_*rov 2 c++ string int map
我刚才有以下案例:
std::map< int, std::string > mm;
mm[ 1 ] = 5;
std::cout << mm[1];
assert( mm.find( 1 ) != mm.end() );
Run Code Online (Sandbox Code Playgroud)
但这不打印任何东西和assert没有不失败的.
这似乎是一个错字,它一定是mm[ 1 ] = '5';.在我弄明白之后,我尝试了:
std::string s1( 5 );
std::string s2 = 5;
Run Code Online (Sandbox Code Playgroud)
没有,如果这编译.怎么了?
std::map::operator[]首先创建一个带有type的元素std::map::mapped_type,然后返回对它的引用.
那么,这里发生的是以下内容:
std::string 对象被创建并默认构造;std::mapoperator= 在这个对象上被调用在这种情况下,std::string::operator=被称为.
这里出现了"神奇" - 有一个超载operator=,char以此为参数.此外,该数字可以隐式转换为char.那么,实际发生的是:
std::string s;
s = (char)5;
Run Code Online (Sandbox Code Playgroud)
例如,这个:
mm[ 1 ] = 65; // ASCII for 'A'
mm[ 2 ] = 98; // ASCII for 'b'
std::cout << m[ 11 ] << mm[ 2 ];
Run Code Online (Sandbox Code Playgroud)
将打印Ab.
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |