Hatalar, hatalar, sorular - sayfa 2721

 
Koldun Zloy :

mantıksız Değiştirmeyecekseniz, bu const yapmanız gerektiği anlamına gelmez. Değişkeni private yapmak yeterlidir.

Bunun sayesinde bir şey alsan mantıklı olurdu. Ama sadece kendin için bir sorun yarattın.

const ekstra bir kontroldür. Aksi takdirde, bu yönergeyi dile hiç sokmamak mümkün olacaktır.


Public const alanı iyidir çünkü DOĞRUDAN (referans yoluyla iletilebilir) okunabilirdir. Ancak hatalı değişimi hariç tutulmuştur.


const program yazarken bana çok yardımcı oluyor. Bu ilk kez bir sorun oldu.


Tehdit Bunun ve ::'nin kullanılması, yazılamayabilecekleri yerlerde de yardımcı olur.

 
fxsaber :

const ekstra bir kontroldür. Aksi takdirde, bu yönergeyi dile hiç sokmamak mümkün olacaktır.


Public const alanı iyidir çünkü DOĞRUDAN (referans yoluyla iletilebilir) okunabilirdir. Ancak hatalı değişimi hariç tutulmuştur.


const program yazarken bana çok yardımcı oluyor. Bu ilk kez bir sorun oldu.


Tehdit Bunun ve ::'nin kullanılması, yazılmayacakları yerlerde de yardımcı olur.

Değişkeni özel yapın. Okumak için işlevi kullanın. Referans olarak const int iletmeye gerek yoktur.

 
Koldun Zloy :

Değişkeni özel yapın. Okumak için işlevi kullanın. Referans olarak const int iletmeye gerek yoktur.

const öğesinin basitçe göz ardı edilmesini öneriyorsunuz.

 
fxsaber :

const öğesinin basitçe göz ardı edilmesini öneriyorsunuz.

Numara. Ancak bu özel durumda, gerekli değildir.

 
Kahretsin, problem bir anda ortaya çıktı. " Fareler ağladı, kendilerini iğnelediler ama kaktüsü kemirmeye devam ettiler."
 
fxsaber :

genel olarak denenmiş, ne söylenirse söylensin, herhangi bir çözüm "kusurlu" olacaktır.

Bir yapı alanına yürütme hızı ve erişim kontrolünden bahsediyorsak, o zaman çirkin bir çözüm yazabilirsiniz, ancak görevi yerine getirmek

Genelde yapıdaki statik yöntemleri reddederdim - sadece mantıklı değiller, kod hala kafa karıştırıcı ve mantıklı olmayacak

şöyle bir şeye benziyor:

 int tmp[] = { 1 , 2 , 3 , 99 };
struct A
{
private :
   static int count;
public :
   const int a;
   A():a(tmp[count++]) {}
};
static int A::count = 0 ;
//+------------------------------------------------------------------+
void OnStart ()
{
   A a[ ArraySize (tmp)];
   for ( int i= 0 ;i< ArraySize (a);i++) Print (a[i].a);
}


.... ve sayma sayacı da gerekli değildir, aslında, A a[ArraySize(tmp)]; bir dizi yapı oluşturacak ve geçici dizi tmp'yi kaldıracak bir makro ikamesine

 

Aynı dosya üzerinde aynı anda çalışan iki program vardır. Yazan, FILE_READ|FILE_WRITE|FILE_BIN|FILE_SHARE_READ bayraklarını kullanır. Okuyan FILE_READ|FILE_BIN|FILE_SHARE_WRITE|FILE_SHARE_READ. İlk program FileFlush kullanarak dosyayı periyodik olarak kaydetmesine rağmen, ikincisi dosyanın uzunluğunu yalnızca açılış anında görür. FileSeek'i ileri geri yapmaya çalıştım - yardımcı olmuyor.

Soru: Dosyayı okuyan programın yazılmakta olan verileri almasını nasıl sağlayabilirim?

 

özetleyeceğim:

 struct A {
     const int a; 
    A() {}
};
void OnStart ()
{
            A a1; //(1) нормально
     const int a2; //(2) Error: 'a2' - 'const' variable must be initialized
}

1 ve 2 arasındaki fark nedir?

 
A100 :

özetleyeceğim:

1 ve 2 arasındaki fark nedir?

bu vakayı başlatmak için yerleşik bir mekanizma olduğu umuluyordu, ancak orada hiçbir şey yok

 struct A {
     const int a[ 10 ]; 
    A() { ArrayPrint (a);} //-396985669       32758 -1490812928       32757  2147360768           0 -1681390008         493           0           0

};
//+------------------------------------------------------------------+
void OnStart ()
{
  A a1;
}
//+------------------------------------------------------------------+

Not: burada derleyici görür

 void f()
{
   const int x;   //'x' - 'const' variable must be initialized
}
 
Igor Makanu :

bu davayı başlatmak için yerleşik bir mekanizma olduğu umuluyordu, ancak orada hiçbir şey yok

Not: burada derleyici görür

Prensipte böyle bir durum olmamalıdır - sorun derleyici düzeyinde çözülmüş olmalıdır (C++'da olduğu gibi). Ve burada mümkün görünüyor ve sonuç olarak birkaç sayfada bir tartışma