エラー、バグ、質問 - ページ 3095

 

スクリプトがあります

class X {};

void fTest(X &Obj) {return;}

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

質問:GetPointer(obj)がOKなら、なぜ&objは失敗するのですか?

これは何かに必要なのでしょうか?

 

念のため、はっきりさせておきたい。こんなコードがあったとします。

ClassX *x=new ClassX;

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

delete x;

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

ClassY *y=new ClassY;

Print(x==y);            // может ли быть true?
xとyが等しくなることは原理的に可能なのでしょうか?
 
mktr8591 #:

念のため、はっきりさせておきたい。仮にそのようなコードがあったとします。

xとyが等しくなることは原理的に可能なのでしょうか?

理屈ではそうなんですけどね。以前は、ポインターのアンセットはカウンターを表示していました(すべてのオブジェクトの数を見ることができました)。今はランダムです。

 
fxsaber #:

理屈ではそうなんですけどね。以前は、ポインターのプリントアウトにカウンターが表示されていました(全オブジェクトの数を見ることができます)。今はランダムです。

多分ですが、ランダムにはちょっと小さいかな~、いつもは7桁なんですけどね。
 
mktr8591 # :

スクリプトがあります

質問:GetPointer(obj) が OK で渡された場合、なぜ &obj は失敗するのでしょうか?

何かに必要なのでしょうか?

ここでは、GetPointer()は必要ありません。

   fTest(obj);                       //ОК

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

ここでは、GetPointer()は必要ありません。

同意見です。ただ、なぜこれほどまでに行動に差が出るのかが不思議です。
 
mktr8591 #:

念のため、はっきりさせておきたい。仮にそのようなコードがあったとします。

xとyが等しくなることは原理的に可能なのでしょうか?

いいえ、ありえません。

 
mktr8591 #:

念のため、はっきりさせておきたい。仮に次のようなコードがあったとします。

xがyに等しくなることは原理的にあり得るのでしょうか?


私は、以下のコードに示すように、参照へのオートレンジポインタを使用せず、明示的に行うことをお勧めします(赤でハイライトされています)。

class A
  {
  };

void func(A &)
  {
  }

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

   func(* pa);
  }
 
Ilyas # :


ポインターをリンクに自動変換せず、以下のコードに示すように明示的に行うことをお勧めします(赤でハイライト)。

何が変わったのでしょうか?結局は同じじゃないですか。
 

エラーは間違いないのですが、なぜかバックデイトされています。

class X {};

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

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