Fehler, Irrtümer, Fragen - Seite 3095

 

Es gibt ein Skript

class X {};

void fTest(X &Obj) {return;}

void OnStart()
  {
   X obj;
   fTest(GetPointer(obj));                      //ОК
//fTest(&obj);         //Compile error: '&' - parameter passed as reference, variable expected   
  }

Frage: Wenn GetPointer(obj) korrekt übergeben wird, warum schlägt &obj fehl?

Wird dies für etwas benötigt?

 

Ich möchte das klarstellen, nur für den Fall. Angenommen, es gibt einen Code wie diesen:

ClassX *x=new ClassX;

//какой-то код

delete x;

//......много кода, прошло много времени

ClassY *y=new ClassY;

Print(x==y);            // может ли быть true?
Ist es prinzipiell möglich, dass x gleich y ist?
 
mktr8591 #:

Ich möchte das klarstellen, nur für den Fall. Angenommen, es gibt einen solchen Code:

Ist es prinzipiell möglich, dass x gleich y ist?

Theoretisch, ja. Zuvor wurde beim Zurücksetzen des Zeigers ein Zähler angezeigt (man konnte die Anzahl aller Objekte sehen). Jetzt ist es zufällig.

 
fxsaber #:

Theoretisch, ja. Zuvor zeigte der Zeigerausdruck einen Zähler an (Sie konnten die Anzahl aller Objekte sehen). Jetzt ist es zufällig.

Vielleicht, aber das ist ein bisschen wenig für den Zufall - ich habe normalerweise sieben Ziffern.
 
mktr8591 # :

Es gibt ein Skript

Frage: wenn GetPointer (obj) ok übergeben wird, warum schlägt &obj fehl?

Wird es für etwas gebraucht?

GetPointer () ist hier nicht erforderlich.

   fTest(obj);                       //ОК

 // Это для чего-то нужно? 
   X *objptr;
   objptr = &obj;  
 
Alain Verleyen #:

Ein GetPointer () ist hier nicht erforderlich.

Einverstanden. Ich frage mich nur, warum es einen solchen Unterschied im Verhalten gibt.
 
mktr8591 #:

Ich möchte das klarstellen, nur für den Fall. Angenommen, es gibt einen solchen Code:

Ist es prinzipiell möglich, dass x gleich y ist?

Nein, das ist nicht möglich.

 
mktr8591 #:

Ich möchte das klarstellen, nur für den Fall. Angenommen, wir haben den folgenden Code:

Ist es prinzipiell möglich, dass x gleich y ist?


Ich empfehle, keinen Autoranging Pointer auf eine Referenz zu verwenden, sondern dies explizit zu tun, wie im nachstehenden Code gezeigt (rot hervorgehoben):

class A
  {
  };

void func(A &)
  {
  }

void OnStart(void)
  {
   A a;   
   A *pa=&a;

   func(* pa);
  }
 
Ilyas # :


Ich empfehle, dass Sie den Zeiger nicht in einen Link umwandeln, sondern dies explizit tun, wie im untenstehenden Code gezeigt (rot hervorgehoben):

Was hat sich geändert? Ist es nicht am Ende doch dasselbe?
 

Der Fehler steht außer Frage, aber er ist aus irgendeinem Grund rückdatiert.

class X {};

template <typename T>
void fTest(T &Obj) {return;}

void OnStart()
  {
   X obj;
   fTest(GetPointer(obj));                      //'GetPointer' - parameter passed as reference, variable expected - ДВАЖДЫ!
  }