Erros, bugs, perguntas - página 1768

 
fxsaber:
Isto só é possível num compilador idiota. Você mesmo o sabe.
O compilador C++ não vai pensar bem nisso para si.
#include <iostream>
using namespace std;
struct S
{
    S operator +(const S&) {cout << "operator +\n"; return S{};}
};
S operator ""_s(const char*, size_t) {cout << "literal operator\n"; return S{};}
int main()
{
    cout << "___literal concatenation example___\n";
    S s = "sd"_s "sf"_s;
    cout << "___operator+ example___\n";
    S s2 = "sd"_s + "sf"_s;
}
A produção:
Exemplo de concatenação de literatura___
operador literal
___operador+ exemplo___
operador literal
operador literal

operador +

Como se pode ver, operador+ não foi substituído por concatenação no segundo caso (criado para literalmente com adição posterior de tempo de execução). O compilador simplesmente não pode cortá-lo porque o programador tem demasiadas possibilidades, o que limita grandemente o âmbito da optimização. Isto não é MKL, claro, pode ser diferente, mas a própria afirmação: "um compilador normal fará tudo por mim" está errada.
 
pavlick_:
Isto não é MQL, claro, pode ser diferente, mas a afirmação "um compilador normal fará tudo por mim" está errada.
Bem, uma vez que não existem tais operadores na MQL, então é lógico não ter quaisquer características associadas a eles. Não vou discutir sobre os compiladores, porque não sou de todo um programador. Só conheço um pouco de MQL.
 

Cansado de desperdiçar tempo e dinheiro: o optimista pende na última passagem. Os agentes não fazem nada, tudo está em fase de Autorização. Há silêncio no diário de bordo. Não faz sentido activar/desactivar agentes, tudo começa do zero depois de a optimização ser reiniciada.

Quem enfrentou este problema? Como combatê-lo?

Arquivos anexados:
opt1.png  44 kb
opt2.png  96 kb
opt3.png  88 kb
 

Linha mágica

Sequência de operações em MetaEditor\1495 com uma resolução de ecrã de 1024x768 :

  • Abrir o ficheiro anexo
  • Mova o cursor de deslocamento horizontal para a direita (como na imagem)
  • Na 3ª linha, clicar em /*12345*/
Outros ajustes: Serviço/Settings/General/Tabulação 4 caracteres
Arquivos anexados:
Test.mq5  2 kb
 

Ao tentar converter uma string para um número usando StringToInteger(), se a string não contiver um número, devolve 0 sem um erro (GetLastError() = 0). Se os parâmetros de entrada contiverem uma string e o utilizador especificou os valores incorrectamente - a função devolverá um valor incorrecto e nenhum erro. Isto é mau.

Além disso, se a string contiver uma representação de número incorrecta, por exemplo, 5o (em vez de 50), a função devolverá o valor 5 sem gerar um erro. Não só que não é 0, mas a função quebra a corda como 5, o que mais uma vez é incorrecto.

Por favor, caros programadores, melhorem a função adicionando códigos de erro ou, se não conseguir analisar a string, devolvam o valor LONG_MAX + erro, para que possamos determinar o que está errado. Não o pode fazer agora.

Verificação do código do guião:

#property version   "1.00"
#property script_show_inputs
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
input string value="05";
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   const long iValue=StringToInteger(value);
   Print("iValue = ",iValue,", lastError = ",GetLastError());
  }
//+------------------------------------------------------------------+
 

Implementar a sua própria versão da função - não deve demorar mais de 10 minutos.

Não vamos alterar o comportamento das funções do sistema.

 
Renat Fatkhullin:

Implementar a sua própria versão da função - não deve demorar mais de 10 minutos.

Não vamos alterar o comportamento das funções do sistema.

Então não acha necessário refinar funções, especialmente funções que podem obviamente mentir?

Mesmo que acrescentássemos apenas códigos de erro, estaria tudo bem, mas agora está a sugerir que reinventemos a roda. Não uma complicada, claro, mas uma bicicleta.

 
Alexey Kozitsyn:

Então não acha necessário refinar funções, especialmente funções que podem obviamente mentir?

Mesmo que apenas acrescentasse códigos de erro, seria bom, mas agora está a propor reinventar a roda. Não uma complicada, claro, mas uma bicicleta.

Não há necessidade de refinar, são análogos completos de wtoi/atoi. A questão está encerrada.
 

Erro de compilação

#include <Math\Stat\Math.mqh>
struct S {};
 
Olá, poderia dizer-me se é possível definir um "separador de período" em Metatrader? Só quero poder ver onde terminam as velas de 15, 30 e hora em m5, para não ter de olhar sempre para as horas, como posso fazer isso?