Hatalar, hatalar, sorular - sayfa 2466

 

mantık hatası

 void f( const int   ) {}
void f( const int & ) {}
void OnStart ()
{
           int i = 0 ; f( i ); //(1) нормально
     const int j = 0 ; f( j ); //(2) Error: 'f' - ambiguous call to overloaded function with the same parameters
}

(1) ve (2) arasındaki fark nedir?

 
A100 :

mantık hatası

(1) ve (2) arasındaki fark nedir?

1'de bir hata olmalı gibi görünüyor. Ve 2., j+0 ile atlanabilir.

 
fxsaber :

1'de bir hata olmalı gibi görünüyor. Ve ikincisi j+0 ile atlanabilir .

Peki ya gereksiz aritmetik işlemler için? onsuz yapabilirsen:

         const int j = 0 ; f(( int )j);
 
A100 :

Peki ya gereksiz aritmetik işlemler için?

Derlemeden sonra olmayacak.

 
fxsaber :

Derlemeden sonra olmayacak.

İrade. Sadece genel durumda, bir derleme hatası çalışma zamanı hatasına geçecektir:

 void f( const int   ) { Print ( 1 ); }
#define int short
//...
void f( const int   ) { Print ( 2 ); }
void f( const int & ) { Print ( 3 ); }
void OnStart ()
{                     //Результат:
           int i = 0 ; f( i   );  //2
     const int j = 0 ; f( j+ 0 );  //1
}

Sonuç: 2:1

Ve benim versiyonumda: 2:2

 void OnStart ()
{                     //Результат:
           int i = 0 ; f( i   );  //2
     const int j = 0 ; f(( int )j); //2
}
 
A100 :

İrade. Sadece genel durumda, bir derleme hatası bir çalışma zamanı hatasına geçecektir:

Sonuç: 2:1

Kaynaktaki sonuç karışık. İcrada bir ek olduğunu düşünmüyorum. Derleyicinin öngördüğü şey, bir ifade için bir int işlevi çağırmaktır. İfadenin kendisi değerlendirme yapmaz.

 

C ++ için bir yineleyicinin bir analogunu uygulamayı düşündüm. Ama hüzün vardı...


Geliştiricilere soru:
MQL'de izin verilen tekli operatörlerden hangisinin yeniden yüklenmesi, bir başvuru işlemi uygulamak için en iyi uygulama olarak öneriliyor?

  • tekli +,-,++,--,!,~
 
Sergey Dzyublik :

MQL'de izin verilen tekli operatörlerden hangisinin yeniden yüklenmesi, bir başvuru işlemi uygulamak için en iyi uygulama olarak öneriliyor?

  • tekli +,-,++,--,!,~

Çıldırmak gerekirse, burada forumda en iyi uygulamaları düşünen insanlar var.

En mantıklı şey, istediği için geçiştir. (üzgünüz, bir parametre gerektiriyor, o zaman ekleme en nadir kullanılanıdır) Ama en az bir tane ile iyi sonuç verir mi?

Alabileceğiniz maksimum değer şudur:

(~w).F();

Noktanın önceliği nedeniyle her zaman parantez içine almanız gerekir.

 
Sergey Dzyublik :

Geliştiricilere soru:
MQL'de izin verilen tekli operatörlerden hangisinin yeniden yüklenmesi, bir başvuru işlemi uygulamak için en iyi uygulama olarak öneriliyor?

  • tekli +,-,++,--,!,~

MQL'de neleri kaldırabilirsiniz? - burada nesnelere yönelik işaretçiler bile, işaretçi adıyla erişildiğinde zaten başvurudan kaldırılır

Not: Enerjiniz doğru yolda olurdu .... geçen ay, sonraki yüz kez, iki boyutlu bir dizi için bir sınıf sarmalayıcı yapmaya çalıştım, ne kadar savaşırsam uğraşayım, aşırı yüklenmek mümkün olmadı [] normal bir iki boyutlu dizi olarak erişmek için arr[1] [2] , ve MQL'de işaretçi referansının kaldırılmasından bahsediyorsunuz ...

 
Igor Makanu :

Ne kadar uğraşırsam uğraşayım, normal bir iki boyutlu dizi arr[1][2] olarak erişmek için [] aşırı yükleyemedim ve MQL'de işaretçi referansının kaldırılmasından bahsediyorsunuz ...

olur ))