Erros, bugs, perguntas - página 1768
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Isto só é possível num compilador idiota. Você mesmo o sabe.
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;
}
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.Isto não é MQL, claro, pode ser diferente, mas a afirmação "um compilador normal fará tudo por mim" está errada.
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?
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 caracteresAo 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 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.
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.
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.
Erro de compilação
struct S {};