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> usingnamespace std; struct S { S operator +(const S&) {cout << "operator +\n"; return S{};} }; S operator""_s(constchar*, 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.
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.
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.
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?
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
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 {};