Dependência cíclica de headers

Uma coisa que acaba atrapalhando quem está começando no C++ é a dependência cíclica dos headers. Quando estamos escrevendo programas minúsculos isso não acontece, mas é um cenário muito comum. Antes de falar mais sobre as dependências, vamos entender um pouco da inclusão destes headers. Como funciona o famoso #include ? Supondo que temos 3 arquivos: main.cpp, main.h…

Range loops – Escrevendo código seguro

Eu estava olhando um código de um sistema e me deparei com um trecho que me fez torcer o nariz. O código funcionava, mas imediatamente vi dois problemas potenciais: Bug de int/unsigned int Um vector::size() – 1 Se size for 0, o resultado será 4294967295 ou 0xFFFFFFFF! Código confuso e facilmente quebrável msgs[count] – Não…

Por quê usar templates ?

Se você não está usando templates com C++, você está perdendo toda a diversão. A linguagem C++, apesar de suportar orientação a objetos, diferentemente de Java, não te “obriga” a usá-la. Você poderá ter o melhor dos mundos, em termos dos paradigmas e idiomas. Um pouco de orientação a objetos aqui e programação genérica ali,…

Lambda e a Inferência

Duas das coisas que mais me agradaram no C++ atual são: a inferência de tipo e as expressões lambda (ou simplesmente lambda). Neste post, quero focar em 5 pontos interessantes sobre estes assuntos. São eles: 1. O que é um lambda? 2. Lambda e Functor, qual a relação entre eles? 3. Como funciona a inferência…

Range against the machine

Uma característica do C++ moderno é o range-based for. Antes de falar de qualquer teoria e para que fique mais claro, segue um exemplo: View the code on Gist. O range-based for se baseia em intervalos e iteradores. O que é um iterador em C++ ? Grosseiramente é um ponteiro que suporte aritmética de ponteiros…