Я обнаружил еще один интересный случай явного использования указателя "this" в книге Effective C ++.
Например, скажем, у вас есть функция const, как
unsigned String::length() const
Вы не хотите вычислять длину строки для каждого вызова, поэтому вы хотите кэшировать ее, делая что-то вроде
unsigned String::length() const
{
if(!lengthInitialized)
{
length = strlen(data);
lengthInitialized = 1;
}
}
Но это не скомпилируется - вы меняете объект в const-функции.
Хитрость для решения этой проблемы требует приведения this к неконстантному this :
String* const nonConstThis = (String* const) this;
Тогда вы сможете сделать выше
nonConstThis->lengthInitialized = 1;