错误、漏洞、问题 - 页 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)可以通过,为什么&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)传递正常,为什么&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 - ДВАЖДЫ!
  }