Hatalar, hatalar, sorular - sayfa 2156

 
A100 :

Nereye bağlıdır - soruyu cevaplamak için tam bir örnek gereklidir

Evet, bağlama uygun olan her yerde. Geçerliliğine rağmen, kaydın kendisi bana biraz saçma görünüyor.

 
fxsaber :

Evet, bağlama uygun olan her yerde. Geçerliliğine rağmen, kaydın kendisi bana biraz saçma görünüyor.

Önce // giriş normaldir... sonra saçmadır

 
A100 :

Önce // giriş normaldir... sonra saçmadır

Bir işlev alanına bir yönteme işaretçi atama arzusunda saçma bir şey görmüyorum

 typedef void (*fn)();

void g() { Print ( __FUNCSIG__ ); }

struct A
{
  fn f;
  
  A() : f(g) {}
};

struct B : A
{
   void f() { Print ( __FUNCSIG__ ); }
  
   void A100()   { this .f = this .f; }  // не присвоить полю-функции указатель на одноименный метод, а на другой метод - пожалуйста:
   void A100_2() { this .f = this .h; } // 'h' - pointer to this function type is not supported yet
  
   void h() { Print ( __FUNCSIG__ ); }
};

void OnStart ()
{
  B b;
  
  b.f(); // void g()
  
  b.A100();
  
  b.f(); // void g()
}
 
fxsaber :

Bir işlev alanına bir yönteme işaretçi atama arzusunda saçma bir şey görmüyorum

Saçmalık, derleyicinin basit yöntemlere yönelik işaretçileri desteklememesi ve eğer desteklediyse, sıradan bir işleve ve basit bir yönteme işaretçinin, diğer şeylerin eşit olması durumunda, farklı bir imzaya sahip olması gerçeğinde yatmaktadır.

 
A100 :

bir işlev işaretçisi ve basit bir yöntem işaretçisinin farklı bir imzası var

Statik bir yöntem, imzada bir işlevden nasıl farklıdır?

 
fxsaber :

Statik bir yöntem, imzada bir işlevden nasıl farklıdır?

statik yöntemler , imzaları eşleştiğinde sıradan işlevlerden farklı değildir

 
A100 :

statik yöntemler , normal işlevlerle aynı imzaya sahiptir

O zaman neden kötü?

 typedef void (*fn)();

void g() { Print ( __FUNCSIG__ ); }

struct A
{
   static fn f;
};
static fn A::f = g;

struct B : A
{
   static void f() { Print ( __FUNCSIG__ ); }
  
   void A100() { this .f = this .f; } // по смыслу ничем не отличается от A::f = B::f
};

void OnStart ()
{
  B b;
  
  b.f(); // void g()
  
  b.A100();
  
  b.f(); // void g()
}
Bu tür hobilerin belirsizliklere yol açtığına inanma eğilimindeyim. Mülakatlardaki dil anlama testlerinden sadece biri olarak faydalıdır.
 
fxsaber :

O zaman neden kötü?

Bu tür hobilerin belirsizliğe yol açtığına inanma eğilimindeyim. Mülakatlardaki dil anlama testlerinden sadece biri olarak faydalıdır.
Kötü olan şu ki, C ++'da farklı bir sonuç olacak
 
A100 :
Kötü olan şu ki, C ++'da farklı bir sonuç olacak

Yani haklı değil.

 
fxsaber :

Ne olduğunu?


"Versiyonu Kaydet"i seçtikten sonra, mevcut ayarlar "Sürüm Yükle" menüsünden kullanılabilen yerleşik MT listesine kaydedilir. Liste her danışman için farklıdır.