Declarando variáveis atrás do laço ou dentro do laço? - página 6

 
Georgiy Merts:

Pessoalmente, não gosto muito de ter um monte de variáveis espalhadas por um programa e ter que procurar cada vez que uma variável é criada. É por isso que sempre que possível, tento declarar variáveis no início de uma função, todas juntas - apenas para ver onde elas são criadas e para entender quando elas estão prestes a serem apagadas.

O que você quer dizer com "espalhada pelo programa"? Uma variável local é declarada e aplicada somente no bloco onde ela é usada, e se você tiver que procurá-la, significa que seu código é tão longo que você não pode encontrá-la.

Declarar todas as variáveis no início de uma função é apenas um estilo ruim e arcaico. Até mesmo o velho Strastrup exortou a descartar esses restos do velho Cem favor de um código adequado e confiável: declarar uma variável diretamente onde ela é usada. Você não percebe que sua abordagem está repleta de erros aleatórios. Você inicializa variáveis com alguma coisa? Ou apenas "leve com calma" e depois limpa o comportamento imprevisível do código? ) Talvez uma vez tudo isso tenha sido justificado devido ao hardware de baixa potência e aos compiladores fracos, mas certamente não agora.

 
pivalexander:

Você está sempre se divertindo nos livros e se elogiando, mas a essência da questão e não disse nada além de teoria ao redor do mato, leia-a você vai entender ... Memória e CPU, CPU e memória, a fonte de alimentação - também é usada lá!

Em contraste, aqueles que precisam entender o significado dos meus textos, e os programadores miseráveis precisam sempre alimentar e dar uma resposta pronta em uma bandeja de prata, eles nunca querem entender nada. Portanto, minhas recomendações, embora sejam escritas em resposta a você, mas muito provavelmente não são destinadas a você, mas àqueles que querem aprender e levar suas habilidades à perfeição.

Acredito que existem dois tipos de pessoas - aqueles que viram um ancinho a caminho, apenas por teste determinam o resultado de pisar nele, e aqueles que conhecem as leis elementares da física, os dados sobre o peso dos elementos podem dizer o resultado antecipadamente sem pisar nele.

 
Alexey Navoykov:

Declarar todas as variáveis no início de uma função é apenas um mau estilo arcaico - até mesmo o velho Strastrup exortou a descartar esses restos do velho C em favor de um código adequado e confiável: declarar a variável diretamente onde ela é usada.

imho, bravo! - convincentemente, ao utilizar variáveis em âmbito local é menos provável que atinja uma variável não inicializada, ou melhor, um valor que estava no uso anterior da variável, o compilador não gerará um aviso, e a busca de tais pequenas maldades é entediante

Pelo assunto e testes, bem, sobre nada, mais de 5-7% da diferença não é visível, e não é um fato que o comportamento nas próximas construções não vai mudar

 
Aleksandr Matveev:

Aqueles que precisam - o significado dos meus textos entenderão, e ai dos programadores sempre precisam mastigar e dar uma resposta pronta em uma bandeja, eles nunca querem entender nada. Portanto, minhas recomendações, embora sejam escritas em resposta a você, mas muito provavelmente não são para você, mas para aqueles que querem aprender e levar suas habilidades à perfeição.

Acredito que existem dois tipos de pessoas - aqueles que viram um ancinho a caminho, apenas por teste determinam o resultado de pisar nele, e aqueles que conhecem as leis elementares da física, os dados sobre o peso dos elementos podem predeterminar o resultado sem pisar nele.

Acredito que há dois tipos de pessoas - aqueles que têm a altivez inflada, aqueles que vieram para divertir sua auto-estima e não têm comentários realmente úteis sobre o assunto aqui, na minha opinião eles nem sequer mergulharam no assunto ...

e há aqueles... Não importa, não é você de qualquer forma:)

Aleksandr Matveev:

Tenho uma suspeita de que o autor desta declaração não tem idéia de como funciona o processador, a memória e o compilador... Aposto que qualquer um de seus códigos pode ser acelerado pelo menos dez ou até centenas de vezes. Por causa desses codificadores de merda, a maioria dos produtos é insuportavelmente lenta na maioria dos computadores poderosos com dezenas de núcleos, enquanto você só precisa pensar um pouco... Mas algumas pessoas pensam: "Por que pensar? Você tem que codificar..."

E tenho uma suspeita de que você ainda está preso no nível de"87, começando com o EC1020 e o ZX Spectrum".

"Shitcoder" é você, por isso contratou 600 pessoas...

Sem ofensa

PS: acelere meu código, ok, não por centenas mas pelo menos por dezenas de vezes, o código está no início da linha, no primeiro post, se você não for um merdas, é claro, você pode acelerar qualquer código meu por 10 ou 100 vezes, vamos lá...

 
pivalexander:

Acho que há dois tipos de pessoas - aqueles com arrogância exagerada, aqueles que vieram para divertir seu ego e não têm um único comentário realmente útil sobre o assunto, na minha opinião eles ainda nem se aprofundaram no assunto.

e há aqueles... Não importa, não é você de qualquer forma :)

E tenho uma suspeita de que você ainda está preso ao nível de"87 anos começando com EU1020 e ZX Spectrum".

"Shitcoder" é você, por isso contratou 600 pessoas...

Sem ofensa

seis páginas de discussão de tal absurdo, estou rindo tranquilamente )))) a degradação do fórum é evidente ))

 
Igor Makanu:

imho, bravo! - convincentemente, ao utilizar variáveis em âmbito local é menos provável que atinja uma variável não inicializada, ou melhor, um valor que estava no uso anterior da variável, o compilador não gerará um aviso, e a busca de tais pequenas maldades é entediante

Para o assunto e testes, bem, sobre nada, mais de 5-7% de diferença não é visível, e não é um fato que o comportamento nas próximas construções não vai mudar

Você sabe que declarar uma variável local sem inicialização não garante que ela tenha um valor zero? Afinal, ele é criado na pilha e qualquer coisa pode estar lá.

void Func()
{
   int n = 0;// только так
   ....
}
P.S. I eu mesmo caí no pecado da discussão ))
 
Igor Makanu:

sobre o assunto e os testes, bem, é sobre nada, não mais do que 5-7% de diferença pode ser vista, e não é certo que o comportamento não mudará nas próximas construções

Sim, bem, idealmente não deve haver nenhuma diferença porque a situação é bastante simples de otimizar. E mesmo que o corpo do laço seja colocado em uma função separada, será a mesma, tenho certeza. Mas os paranóicos terão de arrastar esta seqüência por referência para uma função, complicando o código )
 
Alexey Navoykov:
Sim, bem, idealmente não deveria haver nenhuma diferença, já que a situação é bastante simples de otimizar. E mesmo se colocarmos o corpo do loop em uma função separada, será a mesma, tenho certeza. Mas os paranóicos terão que arrastar esta seqüência por referência para uma função, complicando o código )

Os resultados dos testes devem flutuar em 5-15% de inicialização, o vento não é um sistema operacional em tempo real.

 
Alexey Volchanskiy:

Você sabe que declarar uma variável local sem inicialização não garante que ela tenha um valor zero? Afinal, ele é criado na pilha e qualquer coisa pode estar lá.

P.S. aqui eu mesmo caí no pecado da discussão ))))

))))) Uau!

SZZ: a inicialização ao declarar uma variável é a base para escrever qualquer código com o mínimo de erros... até o compilador lhe dirá algo ;)

 
Igor Makanu:

))))) uau!

ZS: a inicialização ao declarar uma variável é a base para escrever qualquer código com um mínimo de erros... até o compilador dirá algo aqui ;)

Acabamos de encontrar um monte de pessoas que pensam que o compilador zera nas variáveis locais, assim como faz com as variáveis globais.

E o compilador não dá nenhuma garantia

void OnTimer()
{
    string st;
    int n;
    Print(st, n);// специально печатаем неиниализированные, варнингов нет
    for (int i = 0; i < 1000; i++)
    {
        st = IntegerToString(i);
    }
}
Razão: