Sim, há ambiguidade no seu caso. De uma boa maneira, deveria haver pelo menos um aviso de compilação para este tipo de coisas.
No meu caso, que é muito mais simples, tudo é claro. Penso que C++ também concorda com isso.
O que eu quero dizer é que no meu caso MQL implica opção (2), enquanto que C++ implica opção (1). Isto é, tem clareza imaginária - uma pequena mudança (de classe A) e o significado muda drasticamente
Como solução temporária, utilizar o operador '! (não lógico). Vamos pensar na solução (podemos mudar o comportamento agora, quando há muito código?) É possível que para um ponteiro, uma operação de conversão bool seja uma operação sobre o ponteiro e não sobre o objecto para o qual aponta.
Sem alterar os códigos existentes, não vai funcionar... Todo o conceito de apontadores como objectos dinâmicos desaba
Quer dizer, em vez de apenas escrever
class A {
public:
booloperator*( A* a ) { returntrue; }
};
voidOnStart()
{
A *a, *b;
if ( a * b ); //(1)
}
teremos de escrever uma confusa.
if ( *a * *b );//(2)
E tudo isto para quê? Para que um ponteiro pudesse ser verificado para NULL? - Existe um operador de comparação para isso:
Existiam razões sérias para abandonar o operador ->?
Não, não havia razões sérias.
A única justificação para a sua ausência é a preocupação por mentes imaturas de utilizadores não familiarizados com C++.
A dupla negação é optimizada pelo compilador?
Sim, é verdade.
Não, não havia razões sérias.
A única justificação para a sua ausência é a de cuidar das mentes frágeis dos utilizadores não familiarizados com C++.
Penso que nada de mal acontecerá se o adicionarmos.
Pode permitir a utilização de um ponto com apontadores onde não haja ambiguidade durante algum tempo.
E, claro, emitir um aviso.
Penso que nada de mal acontecerá se o adicionarmos.
Durantealgum tempo , poderá ser-lhe permitido utilizar um ponto com apontadores onde não haja ambiguidade.
E, claro, emitir um aviso.
Porquê torná-lo tão complicado? Basta fazer registos . e -> equivalentes, intercambiáveis.
Figurativamente falando
#define -> .Sim, há ambiguidade no seu caso. De uma boa maneira, deveria haver pelo menos um aviso de compilação para este tipo de coisas.
No meu caso, que é muito mais simples, tudo é claro. Penso que C++ também concorda com isso.
Tem clareza imaginária - uma pequena mudança (de classe A) e o significado muda drasticamente
Isto é uma mudança na classe e deve resultar numa mensagem de compilação correspondente.
Se não estiver lá, é uma clareza total.
Como solução temporária, utilizar o operador '! (não lógico).
Vamos pensar na solução (podemos mudar o comportamento agora, quando há muito código?)
É possível que para um ponteiro, uma operação de conversão bool seja uma operação sobre o ponteiro e não sobre o objecto para o qual aponta.
Sem alterar os códigos existentes, não vai funcionar... Todo o conceito de apontadores como objectos dinâmicos desaba
Quer dizer, em vez de apenas escrever
teremos de escrever uma confusa.
if ( *a * *b );//(2)E tudo isto para quê? Para que um ponteiro pudesse ser verificado para NULL? - Existe um operador de comparação para isso:
Porquê duplicá-lo?
todo o conceito de ponteiros como objectos dinâmicos colapsa