오류, 버그, 질문 - 페이지 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 - ДВАЖДЫ!
  }