Hatalar, hatalar, sorular - sayfa 1706

 
Комбинатор :

Oh, yavaşlıyorum, ikinci örnek genellikle yanlış

Bu nedenle şu mantıklıdır:

hata: 'int*&' türündeki const olmayan başvurunun 'int*' türündeki bir değerden geçersiz başlatılması

Evet, bunu zaten yukarıda yazdım. İkinci örneği değiştirdim ama yine de çalışmıyor. Operatör bir değer döndürür, yani. kopyala. Üçünü de böyle köreltmek gerekiyordu, ha! ))
 
Sergei Vladimirov :
Üçünü de böyle köreltmek gerekiyordu, ha! ))
Öyleyse neden fxsaber örneğinin ilk parçası çalışıyor?
 
Комбинатор :
Öyleyse neden fxsaber örneğinin ilk parçası çalışıyor?

Ve neden olmasın? Bu[0] ifadesi bir işaretçi döndürür. İşte farklı bir biçimde aynı:

 int a;

int * Func( int & i)
{
   return (&i);
}

int * p = Func(a);   // работает, то же что A* a = this[0]
Func(a) = new int ;   // не работает, то же, что и this[0] = new int
 
Sergei Vladimirov :
this[0] burada bir değerdir.
sadece doğru değil
 class A
{
public :    
   int Tmp;
  
   void operator =( A* )
  {
  }

   void operator =( const int Value )
  {
     this .Tmp = Value;
  }
};

class B
{
public :  
  A* Data[];
  
  B()
  {
     ArrayResize ( this .Data, 1 );
  }

  A* operator []( const int Pos )
  {
     return ( this .Data[Pos]);
  }
  
   void Init()
  {
     // this[0] = new A; // ошибка выполнения: invalid pointer access
     this .Data[ 0 ] = new A;
    
     this [ 0 ] = 5 ; // this[0] - НЕ rvalue
  } 
};

void OnStart ()
{
  B b;
  
  b.Init();
  
   Print (b[ 0 ].Tmp);
}


Sonuç
 2016.09 . 25 18 : 57 : 42.214 Test (RTS- 12.16 ,M1)     5
Sorun biraz anlamsızlık
 void A:: operator =( A* )
Ne yazık ki, kelime dağarcığı açıklamak için zayıf.
 
Sorun, değerden gelen işaretçinin (tanımlayıcı) bir nedenden dolayı bir değişkene atandıktan sonra değere dönüşmesidir. sanrılı...
 

fxsaber :
Точно не так

Результат

Sorun biraz anlamsızlık

Ne yazık ki, kelime dağarcığı açıklamak için zayıf.

Tamam, düşünmek gibi hissetme. Çoktan yorgun.

 
Комбинатор :
Sorun, değerden gelen işaretçinin (tanımlayıcı) bir nedenden dolayı bir değişkene atandıktan sonra değere dönüşmesidir. sanrılı...
Evet, karıştırdım. Sonrasında
    A* a = this [ 0 ];
    a = new A; // так работает

İfade

 CheckPointer ( this [ 0 ]) == POINTER_INVALID

doğru olacak. Bu tamamen mantıklı.

Ve geliştiricilerin imkansızlığın nedenini açık ve güzel bir şekilde formüle etmeleri güzel olurdu.

 this [ 0 ] = new A;
 
fxsaber :
Evet, karıştırdım.
Evet, sıkışmış. Boşluklara girmeden önce kontrol etmek gerekiyordu. kısacası herşey güzel :)
 
Комбинатор :
kısacası herşey güzel :)
Son örneği hala anlamadım. A sınıfındaki "=" operatörünü aşırı yüklemek, bunu[0] değerini bir değerden bir değere dönüştürür... Nasıl olduğunu anlayamıyorum. Bunlar MKL'nin bazı özellikleridir, profesyonellerde böyle bir davranış yoktur. fxsaber , bu tasarımı nasıl tahmin ettin? Aşırı yük = A'da mı yoksa rastgele mi?
 
İşaretçiye bir değer atanır ve üzerine yeni A yazılır.