Erros, bugs, perguntas - página 2199

 
Комбинатор:

Os objectos temporários não são normalmente apagados imediatamente, mas no fim do contexto. Em C++, se não me engano, isto está escrito na norma.

Se quiser uma eliminação rápida, controle o contexto.

Realmente terá de fazer operador =

Obrigado! SD disse que estão a planear fixar o comportamento actual, mas não foi definido nenhum prazo.

 

Linhas de cor (níveis) na pré-visualização (não imprimiram, mas provavelmente também na impressão) gráficos para impressão a preto e branco.


 

Terminal Bild 1795

Windows 7 64.


Se eu começar a optimização e depois a interromper após 30 minutos, o terminal fica pendurado e não há maneira de o parar.

Existem 8 agentes MetaTester64 no Task Manager.

Depois disso, não posso iniciar o terminal. Tenho de esperar ou reiniciar o computador.


É assim para todos?

Запуск платформы - Для продвинутых пользователей - MetaTrader 5
Запуск платформы - Для продвинутых пользователей - MetaTrader 5
  • www.metatrader5.com
По завершении установки в меню "Пуск" создается группа программ торговой платформы, а на рабочем столе дополнительно помещается ярлык программы. Используйте их для запуска. Нельзя запускать одновременно две копии платформы из одной директории. Чтобы одновременно запустить несколько копий, установите соответствующее количество программ в разные...
 
O que há de novo de errado com o fórum? O dia já começou e o abrandamento irreal já começou. As páginas são carregadas rapidamente, depois durante cerca de 30 segundos.
 
Vladimir Karputov:
O que há de novo de errado com o fórum? O dia já começou e o abrandamento irreal já começou. As páginas são carregadas rapidamente então durante cerca de 30 segundos.
Rkn, provavelmente... há um problema em empurrar para outros serviços... é como se o telegrama funcionasse através deles...
 
Erro de compilador
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, acho eu... Há problemas com os empurradores em outros serviços... é como se o telegrama funcionasse através deles...

Estando fora da Rússia, o sítio Web continua por vezes a pendurar. Mas já o tenho há meses. Estou habituado a isso.

 
fxsaber:

Obrigado! Acontece que o objecto de retorno e "=" ao definir um objecto passam por um construtor adicional.

Na verdade, gostaria de ver uma tabela clara algures, quais são os casos chamados construtores (e quais), e quais são os chamados operadores. Neste momento está tudo ao nível da intuição, e falha, é claro.

É melhor não confiar demasiado em quaisquer regras específicas, os compiladores podem optimizar livremente tais coisas (rvo, nrvo, copy elision, talvez algumas outras optimizações cortem o excesso em segurança). O construtor de cópias e o operador "igual" devem fazer a mesma coisa (não é necessário colocar comportamentos diferentes nelas). Há uma boa abordagem, chamada "copy-and-swap-idiom", se o inglês permitir, é descrita em detalhe aqui https://stackoverflow.com/questioncopy-and-swap idioms/3279543/what-is-the-copy-and-swap-idiom.
Em resumo, escreve-se uma função swap que é utilizada em todos os construtores e operadores (reduzimos a quantidade de código, e obtemos o mesmo comportamento, o que resulta em não se preocupar com o que o compilador vai chamar, cortar, sobre-optimizar).

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

"As cordas destacadas levantam questões. Porque é que os objectos temporários não se despenharam assim que foram utilizados? Ou seja, antes da produção de trinta".

Correctamente chamadas perguntas, penso eu. Os objectos temporários devem ter caído após o cólon.

ZS: Apertei um pouco o código aí, pois o construtor de cópias (não o móvel) é de qualquer forma necessário. Para µl, o benefício não é tão óbvio devido à falta de referências de valor.
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_:

É melhor não confiar demasiado em quaisquer regras específicas, os compiladores podem optimizar livremente tais coisas (rvo, nrvo, copy elision, talvez algumas outras optimizações possam ser discretamente eliminadas). O construtor de cópias e o operador "igual" devem fazer a mesma coisa (não é necessário colocar comportamentos diferentes nelas). Há uma boa abordagem, chamada "copy-and-swap idiom", se o inglês o permitir, é descrita em detalhe aqui https://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom.
Em resumo, escreve-se uma função swap que é utilizada em todos os construtores e operadores (reduzimos a quantidade de código e obtemos o mesmo comportamento e como resultado não se preocupa com o que o compilador chama, corta, optimiza em excesso).

"As linhas destacadas levantam questões. Porque é que os objectos temporários não se despenharam assim que foram utilizados? Ou seja, antes da produção de trinta".

Correctamente chamadas perguntas, penso eu. Os objectos temporários devem ter caído após o cólon.

Obrigado, o SD já avisou sobre os planos do RVO.

 
Porque é que o guião não produz nada?
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;
}