Nadat een programma dat ik onlangs heb geport van Windows naar Mac begon te crashen in Debug-builds, maar het prima deed in Release-builds, ben ik daar eens ingedoken en heb ik het probleem weten te reduceren tot een testcase. Onderstaand programma geeft in Release-modus de (wat mij betreft) correcte output "12345[number=12345]", maar in Debug-modus wordt dat "12345[number=]", oftewel, lijkt het alsof de int helemaal niet aan de ostringstream wordt toegevoegd:
(Bovenstaande programma gewoon in een nieuw XCode commandline project gooien, ik zit onder Snow Leopard en compileer dus voor 10.6 en x86_64, maar dat lijkt niets uit te maken).
Ik heb het niet gecheckt, maar ik kan me herinneren dat dit soort code onder Windows ook gewoon werkte, en volgens mij doe ik niet zoveel verkeerd. Het toevoegen van extra std::setbase(10) of std::dec manipulators helpt allemaal niet. Wie ziet wat ik over het hoofd zie?
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| #include <iostream> #include <sstream> #include <iomanip> using namespace std; int main (int argc, char * const argv[]) { std::ostringstream wos; int x = 12345; wos << (const int&)x; wos.flush(); std::string test = wos.str(); std::cout << x; std::cout << "[number=" << test << "]" ; return 0; } |
(Bovenstaande programma gewoon in een nieuw XCode commandline project gooien, ik zit onder Snow Leopard en compileer dus voor 10.6 en x86_64, maar dat lijkt niets uit te maken).
Ik heb het niet gecheckt, maar ik kan me herinneren dat dit soort code onder Windows ook gewoon werkte, en volgens mij doe ik niet zoveel verkeerd. Het toevoegen van extra std::setbase(10) of std::dec manipulators helpt allemaal niet. Wie ziet wat ik over het hoofd zie?
[ Voor 8% gewijzigd door MisterData op 19-10-2009 17:04 ]