Errori, bug, domande - pagina 1691

 
errore di generazione del codice
void OnStart()
{
  int a = {0}; // code generation error
}
 
Andrey Dik:

Quali valori di spread produce la funzioneCopySpread() per il periodo grafico corrispondente?

Non è chiaro se si tratta della media, del minimo o del massimo, e l'aiuto della funzione non dice nulla al riguardo.

 
Andrey Dik:

Quali valori di spread produce la funzioneCopySpread() per il periodo grafico corrispondente?

Non è chiaro se si tratta della media, del minimo o del massimo, e l'aiuto della funzione non dice nulla al riguardo.

Dove, nel conto o nel tester
 
Alexander Bereznyak:
dove, nel conto o nel tester
nessuna delle quali è presente nel riferimento.
 

chiamata ambigua a funzione sovraccaricata con gli stessi parametri

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  
}

È un malinteso o un bug?

 
fxsaber:

È un mio malinteso o un bug?

La mia comprensione è che questo codice dovrebbe comportarsi allo stesso modo in entrambi i casi.
 
fxsaber:

chiamata ambigua a funzione sovraccaricata con gli stessi parametri

È un malinteso o un bug?

Incomprensione.

Bene, ecco, ho risposto. ))))

 
Комбинатор:
Per quanto ne so, questo codice deve comportarsi allo stesso modo in entrambi i casi.

È quello che penso anch'io.

Sergei Vladimirov:

Incomprensione.

Bene, è tutto, ho risposto. ))))

Quello stupido esempio di codice sorgente ha richiesto molto tempo per essere creato. Il mio senso dell'umorismo è quasi scomparso mentre lo stavo creando.

 
fxsaber:

Questo esempio di fonte stupida ha richiesto molto tempo per essere creato. Il mio senso dell'umorismo è quasi scomparso mentre lo stavo creando.

(Ok. )

In tutte e tre le versioni della chiamata è impossibile capire se l'argomento è passato per valore o per riferimento, quindi il compilatore non può scegliere quale funzione chiamare. E il modificatore const li sovraccarica: void f(){} e void f() const {} sono funzioni diverse. Se nel vostro esempio dichiarate uno dei metodi come const, allora l'incertezza scomparirà: il compilatore selezionerà il metodo desiderato a seconda che la chiamata sia fatta da un oggetto costante o meno (il tipo di argomento nel vostro esempio non importa).

Il vostro oggetto a non è una costante, quindi il metodo senza const sarà chiamato tutte e tre le volte. Se dichiarate un oggetto come costante (A const a;), allora verrà chiamato un metodo costante.

Vedere quale sarà l'output:

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:

Bene. )

In tutte e tre le varianti della chiamata è impossibile capire se un argomento è passato per valore o per riferimento, ecco perché il compilatore non può scegliere quale funzione chiamare. E il modificatore const li sovraccarica: void f(){} e void f() const {} sono funzioni diverse. Se nel vostro esempio dichiarate uno dei metodi come const, allora l'incertezza scomparirà: il compilatore selezionerà il metodo desiderato a seconda che la chiamata sia fatta da un oggetto costante o meno (il tipo di argomento nel vostro esempio non importa).

Il vostro oggetto a non è una costante, quindi il metodo senza const sarà chiamato tutte e tre le volte. Se dichiarate l'oggetto come costante (A const a;), allora il metodo costante sarà chiamato.

L'avreste eseguito prima voi. L'errore è SOLO qui
const int i2 = 0;
a.func(i2); // 'func' - ambiguous call to overloaded function with the same parameters

Tutte le chiamate precedenti passano senza problemi.

Vedi cosa viene stampato:

Questo viene da un altro thread.