コピーコンストラクタと代入コンストラクタのコードなのですが
二つの最初のif文のif(&x == this)if(&x != this)などはどのような意味なのでしょうか? コピーのif(&x == this)がtrueの時と if(&x != this)falseの時はその後の処理はどうなるのでしょうか?
1(例)a.operator(b);と解釈されるのでthisはbなのでしょうか?
a = b = c;となって時これはエラーになりますが、エラーにならない方法はありますか?

  ////////////////int main部///////////////////////////////
  int main(){

  C t(9,"TTT");
  C x(4,"AAA");
  C y = x;//コピー
  t = x;//代入

  }
 //////////////////source.cpp部////////////////////////////////
        void C::view()const
        {
            for (int i = 0; i < num; i++)
            {
                cout << " [" << i << "]: "<<vec[i];
            }
            cout << "\n\n";
        }

        /*コンストラクタ*/
        C::C(int x = 0, string n = "no name") : num(x), vec(new int[x]), name(n)
        {
            for (int i = 0; i < num; i++)
            {
                vec[i] = 0;
            }
        }

        /*コピーコンストラクタ*/
            C::C(const C& x)
        {
                cout << "コピーコンストラクタ\n";
                if (&x != this)
                {
                    num = 0;
                    vec = NULL;
                }
                else {
                    num = x.num;
                    vec = new int[num];
                    for (int i = 0; i < num; i++)
                    {
                        vec[i] = x.vec[i];
                    }
                }
        }
        /*代入コンストラクタ*/
            C& C::operator = (const C& z)
            {
                cout << "代入コンストラクタ\n";

                if (&z != this)
                {
                    if (z.num != num)
                    {
                        delete[] vec;
                        num = z.num;
                        vec = new int[num];

                    }

                    for (int i = 0; i < num; i++)
                    {
                        vec[i] = z.vec[i];
                    }

                }

                return *this;
            }
         /*ostream&*/
         string C::to_string()const
         {
             ostringstream os;
             os << "要素数: " << num << "\n";
             for(int i = 0; i<num; i++)
             {
                 os << " [" << i << "]: " << vec[i]<<"\n";
             }

             return os.str();
         }

         ostream& operator <<(ostream& os, C& x)
         {
             os << x.to_string();

             return os;
         }