avva: (Default)
[personal profile] avva
Будет интересно только программистам, знающим 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; }

Date: 2010-07-06 07:29 am (UTC)
From: [identity profile] eoai.livejournal.com
Ну, похоже, тут проблема идет слева направо, а не наоборот, как кажется.

m[0] = d; - при исполнении выглядит как

string& x = m.operator[](0); // что само по себе очень странно
x.ctor((char)d); // пустой блок памяти вернулся, вызывается ктор

ну, а 123456.789 транформируется в 123456 = 0x0001e240, последний байт = 40 = '@'

Очередной отличный выстрел в ногу.

Date: 2010-07-06 07:31 am (UTC)
From: [identity profile] eoai.livejournal.com
Обманул, не ctor. operator=(char)

Date: 2010-07-06 07:38 am (UTC)
From: [identity profile] eoai.livejournal.com
А странно, что map::оператор[], если не находит ничего, то создает новый объект, вставляет его и потом уже возвращает.

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 29th, 2025 04:46 am
Powered by Dreamwidth Studios