
Once you realise what is happening this is obvious, but it took me a while…
I wanted to write some longs out as character strings in C++, so wrote some code like this:
void writeLongToFile(ofstream& xmlFile, long& value) { stringstream stringy; stringy << value; xmlFile << stringy.rdbuf(); }
But compile time error after compile timer error followed as I was told that I could not use this code with unsigned long
or with const long
and so on … but surely these are simple conversions I thought…
…Just me thinking like a C programmer again. Passing by reference is just that – there is no copying or conversion available and so long
and unsigned long
are fundamentally incompatible.
The solution? Just pass by value – afterall the saving in passing a more or less primative type like long
by reference must be pretty minimal – passing the stream by reference is the real saving here (actually, it’s also practical – as we want the output to go to the real stream and not a copy: in C we’d use a pointer here).