Merge branch 'pr1312-no-unsafe-wxstring-conv'
Add a way to optionally disallow all implicit conversions between wxString and "const char*". See https://github.com/wxWidgets/wxWidgets/pull/1312 See #18113.
This commit is contained in:
@@ -375,6 +375,11 @@ more details.
|
||||
set to 1 for compatibility reasons as @c -DwxNO_UNSAFE_WXSTRING_CONV
|
||||
can be used only compiling the application code, without rebuilding the
|
||||
library. Support for this option appeared in wxWidgets 3.1.1.}
|
||||
@itemdef{wxNO_IMPLICIT_WXSTRING_ENCODING,
|
||||
this symbol is not defined by wxWidgets itself, but can be defined by
|
||||
the applications using the library to disable implicit
|
||||
conversions from and to <tt>const char*</tt> in wxString class.
|
||||
Support for this option appeared in wxWidgets 3.1.4.}
|
||||
@itemdef{WXMAKINGDLL_XXX,
|
||||
used internally and defined when building the
|
||||
library @c XXX as a DLL; when a monolithic wxWidgets build is used only a
|
||||
|
@@ -236,12 +236,40 @@ arguments should take <tt>const wxString&</tt> (this makes assignment to the
|
||||
strings inside the function faster) and all functions returning strings
|
||||
should return wxString - this makes it safe to return local variables.
|
||||
|
||||
Finally note that wxString uses the current locale encoding to convert any C string
|
||||
Note that wxString uses by default the current locale encoding to convert any C string
|
||||
literal to Unicode. The same is done for converting to and from @c std::string
|
||||
and for the return value of c_str().
|
||||
For this conversion, the @a wxConvLibc class instance is used.
|
||||
See wxCSConv and wxMBConv.
|
||||
|
||||
It is also possible to disable any automatic conversions from C
|
||||
strings to Unicode. This can be useful when the @a wxConvLibc encoding
|
||||
is not appropriate for the current software and platform. The macro @c
|
||||
wxNO_IMPLICIT_WXSTRING_ENCODING disables all implicit conversions, and
|
||||
forces the code to explicitly indicate the encoding of all C strings.
|
||||
|
||||
Finally note that encodings, either implicitly or explicitly selected,
|
||||
may not be able to represent all the string's characters. The result
|
||||
in this case is undefined: the string may be empty, or the
|
||||
unrepresentable characters may be missing or wrong.
|
||||
|
||||
@code
|
||||
wxString s;
|
||||
// s = "world"; does not compile with wxNO_IMPLICIT_WXSTRING_ENCODING
|
||||
s = wxString::FromAscii("world"); // Always compiles
|
||||
s = wxASCII_STR("world"); // shorthand for the above
|
||||
s = wxString::FromUTF8("world"); // Always compiles
|
||||
s = wxString("world", wxConvLibc); // Always compiles, explicit encoding
|
||||
s = wxASCII_STR("Grüße"); // Always compiles but encoding fails
|
||||
|
||||
const char *c;
|
||||
// c = s.c_str(); does not compile with wxNO_IMPLICIT_WXSTRING_ENCODING
|
||||
// c = s.mb_str(); does not compile with wxNO_IMPLICIT_WXSTRING_ENCODING
|
||||
c = s.ToAscii(); // Always compiles, encoding may fail
|
||||
c = s.ToUTF8(); // Always compiles, encoding never fails
|
||||
c = s.utf8_str(); // Alias for the above
|
||||
c = s.mb_str(wxConvLibc); // Always compiles, explicit encoding
|
||||
@endcode
|
||||
|
||||
@subsection overview_string_iterating Iterating wxString Characters
|
||||
|
||||
|
Reference in New Issue
Block a user