Só um comentário. Não existe “C/C++”. Existem é duas linguagens, uma chamada C, outra chamada C++. Elas ocupam nichos de mercados diferentes e tem características muito diferentes. Aliás, programar em C++ usando a sintaxe do C, é considerado um problema grave. Se você ouvir alguém falando das duas como se fosse a mesma coisa, tenha certeza: a pessoa não sabe do que está falando.
Há poucos contextos onde você pode se referenciar assim.
O C é muito mais usado para sistemas operacionais, firmware, drivers, e APIs de tempo real. Aliás, praticamente tudo que enquadraram o C++ aí em cima quando falaram em “C/C++”. Ele perdeu muito espaço em aplicações desktop hoje em dia para o C++.
O C++ praticamente não é usado em hardware, principalmente a parte OO. Seu forte mercado é mesmo o de aplicações, incluindo praticamente toda a indústria de jogos, navegadores, players de vídeo e música, editores de imagens, IDEs… aliás, praticamente todos os softwares de prateleira. Ele tem baixa penetração no mercado de hardware, embora existam esforços nesse sentido. Existe o uso do C++ em firmware, mas usando apenas o subset estruturado do C++, sem a STL, e alguma coisinha de templates, o que é praticamente equivalente a se programar em C.
É muitíssimo mais difícil programar em C++ e em C do que em Java, C#, ou qualquer outra linguagem gerenciada. Se por um lado você ganha mais controle, como a gerência de memória, ou acesso direto ao SO, por outro você paga um preço muito alto para isso. Erros nessas linguagens geram menos informações de debug, você tem muito mais problemas com buffers underuns, dangling pointers, memory leaks, etc. São problemas bem mais difíceis de se corrigir.
Por outro lado, linguagens como C e o C++ permitem escrever sistemas que dão garantias de tempo real, e usem absolutamente todos os recursos de uma plataforma até seu último suspiro. Se usadas corretamente, tanto o C quanto o C++ permitem a recompilação num número gigante de plataformas, muito maior do que o Java sequer sonha (só a título de exemplo, aplicações com a SDL são portáveis para os seguintes SOs: Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, QNX, AmigaOS, Dreamcast, Atari, AIX, OSF/Tru64, RISC OS, SymbianOS e OS/2).
Para aplicações comerciais, não vejo porque você deveria abrir mão de garbage collection e de uma linguagem gerenciada, como Java ou C#. São linguagens mais fáceis de programar, menos sujeitas a erro, facilmente portáveis de boa performance, de grande comunidade e já com muita estrutura implementada, seja para web ou desktop (containeres web, drivers de BD e diversas APIs). Do ponto de vista de gerencia de projetos, é mais fácil achar profissionais para essas linguagens e esses profissionais custam geralmente mais barato. Do ponto de vista pessoal, o salário pode ser um pouco menor, mas há muito mais empregos disponíveis.
Escrevi um artigo no Ponto V sobre o uso de Java e C++ pra jogos: Ponto V! - Java no desenvolvimento de jogos