오류, 버그, 질문 - 페이지 1691

 
코드 생성 오류
 void OnStart ()
{
   int a = { 0 }; // code generation error
}
 
Andrey Dik :

해당 차트 기간 동안 CopySpread() 함수가 반환하는 스프레드 값은 무엇입니까?

그것이 평균인지, 최소값인지, 최대값인지 명확하지 않으며 함수의 도움말에서는 이에 대해 아무 말도 하지 않습니다.

 
Andrey Dik :

해당 차트 기간 동안 CopySpread() 함수가 반환하는 스프레드 값은 무엇입니까?

그것이 평균인지, 최소값인지, 최대값인지 명확하지 않으며 함수의 도움말에서는 이에 대해 아무 말도 하지 않습니다.

어디에서, 계정 또는 테스터에서
 
Alexander Bereznyak :
어디에서, 계정 또는 테스터에서
둘 다 설명서에 없습니다.
 

동일한 매개변수를 사용하여 오버로드된 함수 에 대한 모호한 호출

 class A
{
public :  
//  void func( const int ) const {} // если заменить на это - будет компилироваться
   void func( const int ) {}

//  void func( const int& ) const {} // если заменить на это - будет компилироваться
   void func( const int & ) {}
};

void OnStart ()
{
  A a;

  a.func( 0 );  

   int i1 = 0 ;
  a.func(i1);  

   const int i2 = 0 ;
  a.func(i2); // 'func' - ambiguous call to overloaded function with the same parameters  
}

이것은 나의 오해인가 버그인가?

 
fxsaber :

이것은 나의 오해인가 버그인가?

내 이해에 따르면 이 코드는 두 경우 모두 동일하게 작동해야 합니다.
 
fxsaber :

동일한 매개변수를 사용하여 오버로드된 함수에 대한 모호한 호출

이것은 나의 오해인가 버그인가?

오해.

글쎄, 내가 대답했다. ))))

 
Комбинатор :
내 이해에 따르면 이 코드는 두 경우 모두 동일하게 작동해야 합니다.

또한 나는 생각한다.

세르게이 블라디미로프 :

오해.

글쎄, 내가 대답했다. ))))

이 어리석은 소스 예제는 만드는 데 오랜 시간이 걸렸습니다. 만드는 동안 유머 감각은 거의 사라졌습니다.

 
fxsaber :

이 어리석은 소스 예제는 만드는 데 오랜 시간이 걸렸습니다. 만드는 동안 유머 감각은 거의 사라졌습니다.

좋은. )

세 가지 호출 옵션 모두에서 인수가 값으로 전달되는지 또는 참조로 전달되는지 이해하는 것이 불가능하므로 컴파일러는 호출할 함수를 선택할 수 없습니다. 그리고 const 수정자는 그것들을 오버로드합니다: void f(){}와 void f() const {}는 다른 함수입니다. 예제에서 메서드 중 하나를 const로 선언하면 모호성이 사라집니다. 컴파일러는 호출이 const 개체에서 수행되었는지 여부에 따라 올바른 메서드를 선택합니다(귀하의 예제에서 인수 유형은 중요하지 않습니다. ).

객체는 const가 아니므로 const가 없는 메서드는 세 번 모두 호출됩니다. 객체를 const(A const a;)로 선언하면 const 메서드 가 호출됩니다.

출력되는 내용을 확인하십시오.

 class A
{
public :  
   void func() { Print ( "Non const" );}
   void func() const { Print ( "Const" );}
};

void OnStart ()
{
        A a;
        A const b;
        
        a.func();
        b.func();
}
 
Sergei Vladimirov :

좋은. )

세 가지 호출 옵션 모두에서 인수가 값으로 전달되는지 또는 참조로 전달되는지 이해하는 것이 불가능 하므로 컴파일러는 호출할 함수를 선택할 수 없습니다. 그리고 const 수정자는 그것들을 오버로드합니다: void f(){}와 void f() const {}는 다른 함수입니다. 예제에서 메서드 중 하나를 const로 선언하면 모호성이 사라집니다. 컴파일러는 호출이 const 개체에서 수행되었는지 여부에 따라 올바른 메서드를 선택합니다(귀하의 예제에서 인수 유형은 중요하지 않습니다. ).

객체는 const가 아니므로 const가 없는 메서드는 세 번 모두 호출됩니다. 객체를 const(A const a;)로 선언하면 const 메서드 가 호출됩니다.

당신이 먼저 시작할 것입니다. 여기에서만 오류
 const int i2 = 0 ;
a.func(i2); // 'func' - ambiguous call to overloaded function with the same parameters

지금까지 모든 통화가 차질 없이 진행되었습니다.

출력되는 내용을 확인하십시오.

이것은 다른 오페라에서 가져온 것입니다.