Erros, bugs, perguntas - página 2417

 
Alexey Navoykov:

Estou ciente de que não compila. Estou a falar de verificação de sintaxe (que em ME também se chama "Compilar"), porque até a especifiquei entre parênteses num post anterior. Se também se executar a verificação de sintaxe no compilador C++ (através da linha de comando normalmente), ele repreenderá como um querido.

Veja, se não especificar:

B b;

C++ compila este código na perfeição. Portanto, a sintaxe está correcta. O problema começa ao nível da criação de objectos, porque é aí que os objectos de classe serão atribuídos.

Basta imaginar um modelo que nunca verificaria para ver se pode ser utilizado num cabeçalho. O que é que o compilador deve fazer neste caso? Suponha que precisa de implementar std:lower para uma estrutura e não há implementação em *.h... O compilador também não pode jurar na fase de verificação.

Pode especificar como verifica a sintaxe para *.h a partir da linha de comando para verificar este código? Tornou-se interessante)

 
Andrey Pogoreltsev:

Veja, se não especificar:

C++ compila este código na perfeição. Então a sintaxe está correcta.

Lógica interessante ) E se retirar todo o código, então a sintaxe é ainda mais correcta? ) Citei um código concreto. Não disse que a classe B em particular é incorrecta. Pode muito bem ser usada para chamar métodos estáticos, etc.

Imagine apenas um modelo que não vai verificar para utilização no cabeçalho. O que é que o compilador deve fazer neste caso?

Não há necessidade de substituir noções. Um modelo só é verificado quando é expandido com tipos de betão, é compreensível.

Pode especificar como verifica a sintaxe para *.h a partir da linha de comando para verificar este código? Ficou interessante)

Não posso dar nenhuma dica aqui, porque não me preocupei com tal pandeiro, e escrevi uma macro para VS, que faz compilação de cabeçalho. Para este efeito, muda o modo de documento actual para cpp on the fly, compila-o e depois regressa. Simples e de bom gosto.

Não compreendo porque não há nenhuma opção normal para verificar a sintaxe do cabeçalho em estúdio. Estou a usar uma versão bastante antiga, talvez já esteja disponível.

 
Alexey Navoykov:

Não compreendo porque é que não há nenhuma opção normal para verificar a sintaxe do cabeçalho em estúdio.

Ctrl+F7 , esta combinação está provavelmente disponível desde pelo menos 2008 - compilar um ficheiro separado
 
TheXpert:
Ctrl+F7 , esta combinação existe provavelmente desde pelo menos o Studio 2008 - compilar um ficheiro separado
Estou a falar de cabeçalhos, enquanto que esta combinação se refere ao cpp. Pelo menos, é assim no meu estúdio de 2010.
 

Hesitei durante muito tempo antes de afixar, verificando a minha própria construção, mas ainda há algo de errado com o testador...

O teste parou literalmente no início:

Sem mudar nada, pressiono "começar" uma segunda vez, vai até ao fim (com uma pequena pausa no local onde foi interrompido) :

Fez mais algumas abordagens - os resultados são estritamente alternados (um após o outro, mesmo/ouds). Até ao ponto de "penhasco", os gráficos de equilíbrio são semelhantes. Mais uma vez, eu não mudo nada, basta clicar em "começar".

Este é muito provavelmente o ponto em que acrescenta outro carácter (porque não todos os 5 desde o início do teste?):


Deixando de lado a questão da disponibilidade real de memória (segundo o gestor de tarefas, 1,2-1,4GB grátis, ou seja, corresponde ao relatório), não pode ser que o mesmo teste precise de quantidades diferentes de memória para ser executado? E se o relatório diz que 400Mb é suficiente, pode fazer três desses testes em 1.2Gb...

Dados adicionais: teste em 5 símbolos, por abertura de barra, H1, 2004...hoje. O corpo tem 7 matrizes duplas com 500 elementos e uma pequena estrutura de matriz (armazena dados para cada símbolo, ou seja, neste caso 5 x 13), o tamanho é definido durante a inicialização e não muda mais, ou seja, não há nada para consumir memória. O código é processual, simples, pequeno, sem repetição e inclui bibliotecas.

Funciona em quatro símbolos, mas em 6-7-8 tem o mesmo efeito que em 5 símbolos - apenas uma vez. Ao mesmo tempo, a primeira vez após adicionar um novo personagem - funciona sempre, a seguinte - não, depois funciona de novo, etc.

Há uma suspeita de que a memória não está a ser libertada atempadamente, apenas a presença de um erro relacionado com a sua falta.

Total de 3 problemas:

  • o teste é executado apenas uma vez (estritamente) se não houver alterações nas definições ou código
  • há memória livre suficiente para vários testes (se a mensagem após a aprovação do teste for fiável), mas aparece um erro de memória insuficiente (em tentativas pares). (400 foram utilizados durante o "sucesso", 1200 foram gratuitos quando o erro ocorreu)
  • alguns caracteres estão ligados no meio do teste, se houver um histórico (pode vê-lo no registo de sincronização). Sinal de sondagem em cada nova barra de todos os símbolos (em loop)

 
Alexey Navoykov:
Tratava-se de cabeçalhos, e esta combinação refere-se ao cpp. Pelo menos no meu estúdio de 2010, faz.
sim ( e a sua maneira parece ser mais conveniente do que fazer um cpp vazio para o cabeçalho
 

Porque é proibido?

void fn(const int&) {}

void start() {
   fn(5);  // parameter passed as reference, variable expected

}
 
Vict:

Porque é proibido?

literalmente apenas pelo valor. porquê - não sei, tem de perguntar à equipa de desenvolvimento
 
TheXpert:
Esta tem sido a tradição desde tempos imemoriais. literais apenas por valor. porquê - não sei, tem de se perguntar aos criadores

A passagem de um parâmetro por referência implica que existe uma variável distribuída na memória.

As constantes não são armazenadas em qualquer lugar e são utilizadas directamente.

 
TheXpert:
Não sei porquê, vou ter de perguntar à equipa de desenvolvimento.

Para agradar aos masoquistas. Não fiquei impressionado com o bilio padrão, por isso decidi escrever um vector semelhante, mas devido à abundância de "truques", acaba por ser mais um subdesenvolvimento.

void push_back(const T &value);