Unterschied zwischen static_cast <const A> (* this) und static_cast <const A &> (* this)

in folgendem Code (aus C ++ übernommen):

class A 
{
  ....
  char& operator[](std::size_t position)         // now just calls const op[]
  {
    return
      const_cast<char&>(           // cast away const on op[]'s return type;
        static_cast<const TextBlock&>(*this)   // add const to *this's type;
          [position]                           // call const version of op[]
      );
  }

  const char& operator[](int index) const
  {
     ...
  }
}
//complete example, tested with VC 2010
#include<iostream>
#include<string>

class TextBlock
{
public:
    TextBlock(std::string st):text(st){};
    TextBlock(char* cstr): text(cstr){};
    TextBlock(const TextBlock& r)
    {
        std::cout<<"copy constructor called"<<std::endl;
    }
    char& operator[](int index)
    {
        std::cout<<"non-const operator"<<std::endl;
        return const_cast<char&>(static_cast<const TextBlock>(*this)[index]);
    }

    const char& operator[](int index) const
    {
        std::cout<<"const operator"<<std::endl;
        return text[index];
    }

private:
    std::string text;
};

int main()
{
    TextBlock rt("hello");
    std::cout<<rt[0]<<std::endl;
}

Wenn Sie in diesem Code den static_cast von const TextBlock & in const TextBlock ändern, wird die Nicht-const-Version von operator [] rekursiv aufgerufen. Kann jemand erklären, was der Grund dafür ist (warum const TextBlock dazu führt, dass const member function operator [] nicht aufgerufen wird).

Antworten auf die Frage(10)

Ihre Antwort auf die Frage