Errori, bug, domande - pagina 2721

 
Koldun Zloy:

Non ha senso. Se non hai intenzione di cambiarlo, questo non significa che devi fare const. È sufficiente rendere la variabile privata.

Sarebbe logico se tu ne ricavassi qualcosa, ma hai solo creato un problema per te stesso.

const è un controllo aggiuntivo. Altrimenti, non sarebbe necessario introdurre questa direttiva nel linguaggio.


La cosa buona di un campo const pubblico è che è accessibile in lettura (può essere passato per riferimento). Ma cambiare erroneamente è escluso.


const mi aiuta molto quando scrivo programmi. Questa è la prima volta che si presenta un problema.


Aiuta anche a usare questo e :: dove non possono essere scritti.

 
fxsaber:

const è un controllo aggiuntivo. Altrimenti, avremmo potuto evitare di introdurre questa direttiva nel linguaggio.


Un campo const pubblico è buono in quanto è LEGGIBILE (può essere passato per riferimento). Ma cambiare erroneamente è escluso.


const mi aiuta molto quando scrivo programmi. Questa è la prima volta che si presenta un problema.


HH Aiuta anche a usare questo e :: dove non possono essere scritti.

Rendere la variabile privata. Usa una funzione per la lettura, non c'è bisogno di passare const int per riferimento.

 
Koldun Zloy:

Rendere la variabile privata. Non c'è bisogno di passare const int per riferimento.

Lei propone di ignorare semplicemente la cost.

 
fxsaber:

Lei sta suggerendo che la costituzione è semplicemente ignorata.

No. Ma non è necessario in questo caso particolare.

 
Amico, crei un problema dal nulla."I topi piangevano e piangevano ma continuavano a mordere il cactus".
 
fxsaber:

Ho sperimentato, in generale qualsiasi soluzione sarà "difettosa", non importa come la si guardi

Se stiamo parlando di velocità di esecuzione e di controllo dell'accesso al campo della struttura, potete scrivere una brutta soluzione, ma risolverà il problema

Rinuncerei del tutto ai metodi statici nella struttura - non hanno senso, il codice sarà ancora confuso e senza logica

sembra così:

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);
}


....da e anche il contatore del conteggio non è necessario, è necessario, infatti, avvolgere A[ArraySize(tmp)]; in una sostituzione macro che creerà un array di strutture e cancellerà un array temporaneo tmp

 

Ci sono due programmi che lavorano sullo stesso file allo stesso tempo. Quello che scrive usa i flagFILE_READ|FILE_WRITE|FILE_BIN|FILE_SHARE_READ. Quello che legge - FILE_READ|FILE_BIN|FILE_SHARE_WRITE|FILE_SHARE_READ. Anche se il primo programma salva periodicamente il file usando FileFlush, il secondo programma vede solo la lunghezza del file quando viene aperto. Ho provato a fare FileSeek avanti e indietro - non aiuta.

Domanda: come faccio a far sì che il programma che legge il file raccolga i dati da sovrascrivere?

 

Riassumo:

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

Qual è la differenza tra 1 e 2?

 
A100:

Riassumo:

Qual è la differenza tra 1 e 2?

Speravo che ci fosse qualche meccanismo incorporato per inizializzare questo caso, ma non c'è niente

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

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

ZS: qui è dove il compilatore vede

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

Avevo sperato che ci fosse qualche meccanismo incorporato per inizializzare questo caso, ma non c'è niente

ZS: qui il compilatore vede

In linea di principio non dovrebbe esserci un caso del genere - il problema dovrebbe essere stato risolto già a livello di compilatore (come in C++). E qui è un po' possibile e, di conseguenza, una discussione per diverse pagine