C++, a casa automática do Viniccius13, só que tudo tem TNT.

C++ é outra linguagem merda. É basicamente o "antecessor" do Java, então você deve imaginar o tamanho da trolha que a gente vai ver aqui.

Design

Puro chorume. Sério, vamos começar com o básico, vamos dominar o "print". No C, a gente faz print de hexadecimal de forma bem simples.

printf("%08X\n", value);

No C++:

std::cout << std::setfill('0') << std::setw(8) << std::hex << value << std::endl;

ou

cout << setfill('0') << setw(8) << hex << value << endl;

Se você fizer a cagada de colocar using namespace std; Nem consegue distinguir nessa caralha o que é variável e o que é elemento do print.
Pior, vamos fazer um print de um numero normal e um número hexadecimal.

C:

printf("%d: %08X\n", line, value);

C++:

std::cout << std::decimal << line << ": "
	<< std::hex << std::setfill('0') << std::setw(8) << value
	<< std::endl;

Puta que pariu. Acho que o incremento no "C++" foi de verbosidade e ilegibilidade, vai tomar no rabo.

C++ tem exceptions, sabia? O try-catch da filha da puta do Java veio do C++, e acredite, consegue ser PIOR do que a do Java.

#include <iostream>
#include <string>
static void func() {
	throw (int)5;
}
int main()
{
	try {
		func();
	} catch(std::string str) {
		std::cerr << str << std::endl;
	}
}

ESSA PORRA COMPILA E LINKA, CARALHO! Testei aqui, e ainda daria Segfault se o GCC não tivesse adicionado proteção no código! Mas vamos ser realistas, try-catch é uma merda tão grande que nem os programadores dessa merda usam.

Templates

Template é usado pra caralho, aliás, a própria biblioteca padrão do C++ se chama STL, ou Standard Template Library. Não deve ser ruim.

#include <iostream>
#include <string>
template<bool b>
struct test;
template<>
struct test<true> {
	int foo;
};
template<>
struct test<false> {
	char bar;
};
int main()
{
	test<true> foo;
	test<false> bar;
}

Sim, isso é possível. Eu realmente não sei o motivo de você pode fazer isso, isso só vai atrasar a porra do debug, mas isso é possível. Mas isso me deixa uma pergunta, true e false são tipos ou valores? Vai entender.

"Mas com certeza template library ajuda, cara! É só decorar todos os jeitos de como o compilador vai conseguir deduzir o tipo de valor que ele está trabalhando! AUTOMAÇÃO, CARA!" Patético. Automação é só no código mesmo, porque o nível de trabalho até piorou. Nem queira imaginar como você vai debugar esse código aí.

Overloading

Em falar em dedução, no C++ a gente tem overloading, inclusive de operador! Fantástico, vamos brincar com isso.

#include <iostream>
struct value {
	int foo = 0;
	void operator+=(float value) {
		std::cout << "adicionando float" << std::endl;
	}
	void operator+=(double value) {
		std::cout << "adicionando double!" << std::endl;
	}
};
int main()
{
	value v;
	v += 10;
}

Resultado: compilation failed: ambiguous! :D
Overloading é tão automatico que falha automaticamente.

Compilação

O arquivo "main" que eu fiz pra fazer os testes desses programas tem menos de 20 linhas e o tempo de execução do g++ foi de 0.2 segundos. Não parece muito, mas programas feitos com essa merda costumam ter mais de 100 arquivos, e todos os arquivos com pelo menos 200 linhas. Vamos fazer um calculo básico: se um programa de 20 linhas demorou 0.2 segundos, com 200 linhas vai demorar um pouco mais de 1 segundo, contanto com os comentários e linhas vazias. Então 100 arquivos vai demorar 100 segundos, ou 1m30s. Caralho, nem GCC consegue fazer essa merda, e se a gente for considerar os compiladores mais simples como o TCC, essa merda é um inferno pra compilar.