removed const operator[]s (should fix 1162115)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@32864 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
0e6fa1d908
commit
9d9ad67384
@ -371,12 +371,9 @@ public:
|
||||
// return the character at position n
|
||||
value_type at(size_type n) const
|
||||
{ wxASSERT_VALID_INDEX( n ); return m_pchData[n]; }
|
||||
value_type operator[](size_type n) const { return at(n); }
|
||||
// returns the writable character at position n
|
||||
reference at(size_type n)
|
||||
{ wxASSERT_VALID_INDEX( n ); CopyBeforeWrite(); return m_pchData[n]; }
|
||||
reference operator[](size_type n)
|
||||
{ wxASSERT_VALID_INDEX( n ); CopyBeforeWrite(); return m_pchData[n]; }
|
||||
|
||||
// lib.string.modifiers
|
||||
// append elements str[pos], ..., str[pos+n]
|
||||
@ -702,66 +699,44 @@ public:
|
||||
// data access (all indexes are 0 based)
|
||||
// read access
|
||||
wxChar GetChar(size_t n) const
|
||||
{ return operator[](n); }
|
||||
{ return at(n); }
|
||||
// read/write access
|
||||
wxChar& GetWritableChar(size_t n)
|
||||
{ return operator[](n); }
|
||||
{ return at(n); }
|
||||
// write access
|
||||
void SetChar(size_t n, wxChar ch)
|
||||
{ operator[](n) = ch; }
|
||||
{ at(n) = ch; }
|
||||
|
||||
// get last character
|
||||
wxChar Last() const
|
||||
{
|
||||
wxASSERT_MSG( !IsEmpty(), _T("wxString: index out of bounds") );
|
||||
|
||||
return operator[](length() - 1);
|
||||
return at(length() - 1);
|
||||
}
|
||||
|
||||
// get writable last character
|
||||
wxChar& Last()
|
||||
{
|
||||
wxASSERT_MSG( !IsEmpty(), _T("wxString: index out of bounds") );
|
||||
return operator[](length() - 1);
|
||||
return at(length() - 1);
|
||||
}
|
||||
|
||||
/*
|
||||
So why do we have all these overloaded operator[]s? A bit of history:
|
||||
initially there was only one of them, taking size_t. Then people
|
||||
started complaining because they wanted to use ints as indices (I
|
||||
wonder why) and compilers were giving warnings about it, so we had to
|
||||
add the operator[](int). Then it became apparent that you couldn't
|
||||
write str[0] any longer because there was ambiguity between two
|
||||
overloads and so you now had to write str[0u] (or, of course, use the
|
||||
explicit casts to either int or size_t but nobody did this).
|
||||
|
||||
Finally, someone decided to compile wxWin on an Alpha machine and got
|
||||
a surprize: str[0u] didn't compile there because it is of type
|
||||
unsigned int and size_t is unsigned _long_ on Alpha and so there was
|
||||
ambiguity between converting uint to int or ulong. To fix this one we
|
||||
now add operator[](uint) for the machines where size_t is not already
|
||||
the same as unsigned int - hopefully this fixes the problem (for some
|
||||
time)
|
||||
|
||||
The only real fix is, of course, to remove all versions but the one
|
||||
taking size_t...
|
||||
Note that we we must define all of the overloads below to avoid
|
||||
ambiguity when using str[0]. Also note that we don't need const
|
||||
version of operatorp[] at all as indexed access to const string
|
||||
is provided by implicit conversion to "const wxChar *" below.
|
||||
*/
|
||||
|
||||
// operator version of GetChar
|
||||
wxChar operator[](int n) const
|
||||
{ return wxStringBase::operator[](n); }
|
||||
// operator versions of GetWriteableChar()
|
||||
wxChar& operator[](int n)
|
||||
{ return wxStringBase::at(n); }
|
||||
wxChar& operator[](size_type n)
|
||||
{ return wxStringBase::operator[](n); }
|
||||
wxChar operator[](size_type n) const
|
||||
{ return wxStringBase::operator[](n); }
|
||||
{ return wxStringBase::at(n); }
|
||||
#ifndef wxSIZE_T_IS_UINT
|
||||
// operator version of GetChar
|
||||
wxChar operator[](unsigned int n) const
|
||||
{ return wxStringBase::operator[](n); }
|
||||
|
||||
// operator version of GetWriteableChar
|
||||
wxChar& operator[](unsigned int n)
|
||||
{ return wxStringBase::operator[](n); }
|
||||
{ return wxStringBase::at(n); }
|
||||
#endif // size_t != unsigned int
|
||||
|
||||
// implicit conversion to C string
|
||||
|
Loading…
Reference in New Issue
Block a user