no changes, just clarified meaning of various conversion functions in a comment
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55792 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1526,11 +1526,53 @@ public:
|
|||||||
{ return at(n); }
|
{ return at(n); }
|
||||||
#endif // size_t != unsigned int
|
#endif // size_t != unsigned int
|
||||||
|
|
||||||
// explicit conversion to C string (use this with printf()!)
|
|
||||||
|
/*
|
||||||
|
Overview of wxString conversions, implicit and explicit:
|
||||||
|
|
||||||
|
- wxString has a std::[w]string-like c_str() method, however it does
|
||||||
|
not return a C-style string directly but instead returns wxCStrData
|
||||||
|
helper object which is convertible to either "char *" narrow string
|
||||||
|
or "wchar_t *" wide string. Usually the correct conversion will be
|
||||||
|
applied by the compiler automatically but if this doesn't happen you
|
||||||
|
need to explicitly choose one using wxCStrData::AsChar() or AsWChar()
|
||||||
|
methods or another wxString conversion function.
|
||||||
|
|
||||||
|
- One of the places where the conversion does *NOT* happen correctly is
|
||||||
|
when c_str() is passed to a vararg function such as printf() so you
|
||||||
|
must *NOT* use c_str() with them. Either use wxPrintf() (all wx
|
||||||
|
functions do handle c_str() correctly, even if they appear to be
|
||||||
|
vararg (but they're not, really)) or add an explicit AsChar() or, if
|
||||||
|
compatibility with previous wxWidgets versions is important, add a
|
||||||
|
cast to "const char *".
|
||||||
|
|
||||||
|
- In non-STL mode only, wxString is also implicitly convertible to
|
||||||
|
wxCStrData. The same warning as above applies.
|
||||||
|
|
||||||
|
- c_str() is polymorphic as it can be converted to either narrow or
|
||||||
|
wide string. If you explicitly need one or the other, choose to use
|
||||||
|
mb_str() (for narrow) or wc_str() (for wide) instead. Notice that
|
||||||
|
these functions can return either the pointer to string directly (if
|
||||||
|
this is what the string uses internally) or a temporary buffer
|
||||||
|
containing the string and convertible to it. Again, conversion will
|
||||||
|
usually be done automatically by the compiler but beware of the
|
||||||
|
vararg functions: you need an explicit cast when using them.
|
||||||
|
|
||||||
|
- There are also non-const versions of mb_str() and wc_str() called
|
||||||
|
char_str() and wchar_str(). They are only meant to be used with
|
||||||
|
non-const-correct functions and they always return buffers.
|
||||||
|
|
||||||
|
- Finally wx_str() returns whatever string representation is used by
|
||||||
|
wxString internally. It may be either a narrow or wide string
|
||||||
|
depending on wxWidgets build mode but it will always be a raw pointer
|
||||||
|
(and not a buffer).
|
||||||
|
*/
|
||||||
|
|
||||||
|
// explicit conversion to wxCStrData
|
||||||
wxCStrData c_str() const { return wxCStrData(this); }
|
wxCStrData c_str() const { return wxCStrData(this); }
|
||||||
wxCStrData data() const { return c_str(); }
|
wxCStrData data() const { return c_str(); }
|
||||||
|
|
||||||
// implicit conversion to C string
|
// implicit conversion to wxCStrData
|
||||||
operator wxCStrData() const { return c_str(); }
|
operator wxCStrData() const { return c_str(); }
|
||||||
|
|
||||||
// the first two operators conflict with operators for conversion to
|
// the first two operators conflict with operators for conversion to
|
||||||
|
Reference in New Issue
Block a user