Errori, bug, domande - pagina 2199

 
Комбинатор:

Gli oggetti temporanei di solito non vengono cancellati immediatamente, ma alla fine del contesto. In C++, se non mi sbaglio, è scritto nello standard.

Se volete una cancellazione veloce, controllate il contesto.

Davvero dovrà fare operatore =

Grazie! SD ha detto che stanno pianificando di correggere il comportamento attuale, ma non è stato fissato un calendario.

 

Linee di colore (livelli) durante l'anteprima (non ha stampato, ma probabilmente è così anche in stampa) della grafica per la stampa in bianco e nero.


 

Terminale Bild 1795

Windows 7 64.


Se avvio l'ottimizzazione e poi la interrompo dopo 30 minuti, il terminale si blocca e non c'è modo di fermarlo.

Ci sono 8 agenti MetaTester64 in Task Manager.

Dopo di che non posso avviare il terminale. Devo aspettare o riavviare il computer.


È così per tutti?

Запуск платформы - Для продвинутых пользователей - MetaTrader 5
Запуск платформы - Для продвинутых пользователей - MetaTrader 5
  • www.metatrader5.com
По завершении установки в меню "Пуск" создается группа программ торговой платформы, а на рабочем столе дополнительно помещается ярлык программы. Используйте их для запуска. Нельзя запускать одновременно две копии платформы из одной директории. Чтобы одновременно запустить несколько копий, установите соответствующее количество программ в разные...
 
Cosa c'è di nuovo nel forum? La giornata è iniziata e il rallentamento irreale è iniziato. Le pagine si caricano velocemente, poi per circa 30 secondi.
 
Vladimir Karputov:
Cosa c'è di nuovo nel forum? La giornata è iniziata e il rallentamento irreale è iniziato. Le pagine si caricano velocemente poi per circa 30 secondi.
Rkn, probabilmente... c'è un problema con il push su altri servizi... è come se telegram lavorasse attraverso di loro...
 
Errore del compilatore
class A
{
public:
  int i;
  
  void f() const
  {
    A* Tmp = true ? &this : &this; // no problem - BUG!
//    A* Tmp = &this; // '=' - cannot convert from const pointer to nonconst pointer
    
    Tmp.i = 4;
  }
};

void OnStart()
{
  const A a;
  
  a.f();
  
  Print(a.i); // 4
}
 
Ilnur Khasanov:
rkn, credo... Ci sono problemi con i pushers su altri servizi... è come se telegram lavorasse attraverso di loro...

Essendo fuori dalla Russia, il sito web si blocca ancora a volte. Ma ce l'ho da mesi. Mi ci sono abituato.

 
fxsaber:

Grazie! Si scopre che oggetto di ritorno e "=" quando si definisce un oggetto passano attraverso un costruttore aggiuntivo.

In realtà mi piacerebbe vedere una tabella chiara da qualche parte, quali casi si chiamano costruttori (e quali), e quali operatori. In questo momento è tutto a livello di intuizione, e fallisce, ovviamente.

È meglio non fare troppo affidamento su nessuna regola specifica, i compilatori sono autorizzati abbastanza liberamente a ottimizzare queste cose (rvo, nrvo, copy elision, forse alcune altre ottimizzazioni taglieranno tranquillamente l'eccesso). Il costruttore di copia e l'operatore "uguale" dovrebbero fare la stessa cosa (non c'è bisogno di metterci un comportamento diverso). C'è un buon approccio, chiamato "copy-and-swap idiom", se l'inglese lo permette, è descritto in dettaglio qui https://stackoverflow.com/questioncopy-and-swap idioms/3279543/what-is-the-copy-and-swap-idiom.
In breve, si scrive una funzione swap che viene utilizzata in tutti i costruttori e operatori (si riduce la quantità di codice, e si ottiene lo stesso comportamento, il che si traduce nel non preoccuparsi di ciò che il compilatore chiamerà, taglierà, sovraottimizzerà).

dumb_array& operator=(dumb_array other)
{
    swap(*this, other);
    return *this;
}
dumb_array (dumb_array &&other)
{//this должен быть в валидном состоянии
    swap(*this, other);
}
dumb_array& operator=(dumb_array &&other)
{
    swap(*this, other);
    return *this;
}

"Le stringhe evidenziate sollevano domande. Perché gli oggetti temporanei non sono andati in crash non appena sono stati usati? Cioè, prima dell'uscita di trenta".

Correttamente chiamate domande, credo. Gli oggetti temporanei dovrebbero essere collassati dopo i due punti.

ZS: Ho modificato un po' il codice lì, dato che il costruttore di copia (non quello di spostamento) è comunque necessario. Per µl il beneficio non è così ovvio a causa della mancanza di riferimenti rvalue.
What is the copy-and-swap idiom?
What is the copy-and-swap idiom?
  • stackoverflow.com
What is this idiom and when should it be used? Which problems does it solve? Does the idiom change when C++11 is used? Although it's been mentioned in many places, we didn't have any singular "what is it" question and answer, so here it is. Here is a partial list of places where it was previously mentioned:
 
pavlick_:

È meglio non fare troppo affidamento su nessuna regola specifica, i compilatori sono autorizzati abbastanza liberamente a ottimizzare queste cose (rvo, nrvo, copy elision, forse alcune altre ottimizzazioni taglieranno tranquillamente le cose inutili). Il costruttore di copia e l'operatore "uguale" dovrebbero fare la stessa cosa (non c'è bisogno di metterci un comportamento diverso). C'è un buon approccio, chiamato "copy-and-swap idiom", se l'inglese lo permette, è descritto in dettaglio qui https://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom.
In breve, si scrive una funzione swap che viene utilizzata in tutti i costruttori e operatori (si riduce la quantità di codice e si ottiene lo stesso comportamento e di conseguenza non ci si preoccupa di ciò che il compilatore chiama, taglia, ottimizza troppo).

"Le linee evidenziate sollevano domande. Perché gli oggetti temporanei non sono andati in crash non appena sono stati usati? Cioè, prima dell'uscita dei trenta".

Correttamente chiamate domande, credo. Gli oggetti temporanei dovrebbero essere crollati dopo i due punti.

Grazie, la SD ha già avvertito dei piani RVO.

 
Perché lo script non produce nulla?
class A
{
public:
  A() {}
  
  template <typename T>
  void operator =( T& )
  {
    Print(__FUNCSIG__);
  }

  template <typename T>
  A( T& )
  {
    Print(__FUNCSIG__);
  }
};

A* f()
{
  return(new A);
}

void OnStart()
{
  A* a = f();
  
  A* b;
  b = f();
  
  delete a;
  delete b;
}
Motivazione: