Будет интересно только программистам, знающим C++.
Небольшая загадка. Предугадайте, что напечатает следующая программа, не запуская ее. Потом проверьте себя, если интересно. Комменты не скрываются.
Небольшая загадка. Предугадайте, что напечатает следующая программа, не запуская ее. Потом проверьте себя, если интересно. Комменты не скрываются.
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
map<int, string> m;
double d = 123456.789;
m[0] = d;
cout << "m[0]=" << m[0];
return 0;
}
no subject
Date: 2010-06-27 12:26 pm (UTC)Какой-то из конструкторов string-а который принимает size_t или int (кажется, он инициализует пустой стринг такой длинны или резервирует данное кол-во места) почему-то не объявлен как explicit, и с помощью двойного неявного преобразования (разве такое бывает?!) double->int/size_t->string создаст пустой или длинный стринг из пробелов(?), который и поместит в map.
no subject
Date: 2010-06-27 12:30 pm (UTC)http://www.cplusplus.com/reference/string/string/string/
http://www.sgi.com/tech/stl/basic_string.html
Пойду компилировать и смотреть. Блин, а я то думал, что неплохо в тонкостях с++ разбираюсь :)
no subject
Date: 2010-06-27 12:36 pm (UTC)Вызывается string& operator= ( char c ) предварительно откромсав double=123456.789 до char=0x40 т.е. символа '@'. Пойду проверять...
no subject
Date: 2010-06-27 12:38 pm (UTC)no subject
Date: 2010-06-27 02:14 pm (UTC)