On 28/09/12 16:05, Noel Grandin wrote: > > On 2012-09-28 16:00, Caolán McNamara wrote: >> On Fri, 2012-09-28 at 14:17 +0200, Noel Grandin wrote: >>> you can do this: >>> >>> void f(OUString s) { >>> s = "2"; >>> } >>> >>> OUString s = "1"; >>> f(s); >>> cout << s; // will print "2" >> That will print "1" not "2". >> >> Maybe you meant >> >> void f(OUString& s) { >> s = "2"; >> } >> >> OUString s = "1"; >> f(s); >> cout << s; // will print "2" >> >> but that's perfectly reasonable. >> >> C. >> > > > Yeah, that's what I meant. > But that's also what I have a problem with. > It means that any OUString field or variable is effectively mutable,
i don't see how that is the case. the calling code needs to explicitly pass the string as a parameter to a function for it to be modified, and it's clear from the parameter non-const reference type that this can happen. you can also pass an ordinary pointer by-reference and then the called function can reset it to a different value, that is just how C++ works...: void f(void *& p) { p = (void*)42; } for comparison, in Java you cannot do this directly (because Java does not have call-by-reference semantics, only call-by-value), you have to wrap the string in e.g. an array to get something similar: void f(String[] s) { s[0] = "bar"; } _______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice