{"id":1838,"date":"2021-12-11T22:40:27","date_gmt":"2021-12-12T01:40:27","guid":{"rendered":"https:\/\/elemarjr.com\/cppmoderno\/?p=1838"},"modified":"2025-06-18T16:07:35","modified_gmt":"2025-06-18T19:07:35","slug":"ola-cpp","status":"publish","type":"post","link":"https:\/\/elemarjr.com\/livros\/cpp-moderno\/ola-cpp\/","title":{"rendered":"Ol\u00e1, C++ \/ Introdu\u00e7\u00e3o v 1.0"},"content":{"rendered":"<p><strong>Se C++ fosse uma pessoa, seria uma jovem senhora com pouco mais de 40 anos.<\/strong> Herdeira de fam\u00edlia tradicional, \u00e9 a filha mais famosa da linguagem C.<\/p>\n<p>De uma \u00e9poca onde a mem\u00f3ria dos computadores n\u00e3o passava de uma vaga lembran\u00e7a,<strong> foi constru\u00edda com \u00eanfase em excel\u00eancia na gest\u00e3o de recursos, acesso irrestrito a m\u00e1quina,<\/strong> obviamente cobrando um pre\u00e7o, para muitos alto, pelo controle total. Tudo bem, afinal, grandes poderes exigem grandes responsabilidades.<\/p>\n<p>Adolescente rebelde, <strong>C++, que nasceu orientada a objetos (o nome original da linguagem era C com classes),<\/strong> sempre flertou com outros paradigmas. Viveu uma certa crise de identidade at\u00e9 o in\u00edcio da d\u00e9cada de 1990 quando, finalmente, recebeu uma especifica\u00e7\u00e3o padronizada.<\/p>\n<p>De personalidade dif\u00edcil, \u00e9 temida por muitos e fez com que muita gente perdesse noites de sono tentando encontrar &#8220;vazamentos de mem\u00f3ria&#8221; causados por comunica\u00e7\u00e3o nem sempre eficaz (c\u00f3digo ruim n\u00e3o tolerado nem facilitado pela linguagem).<\/p>\n<p>Mais madura, ao longo dos anos, hoje em dia, <strong>C++ afirma que est\u00e1 moderna<\/strong> e, sem d\u00favidas, h\u00e1 bons motivos para acreditar que isso seja verdade. Entretanto, muita gente que nem a conhece t\u00e3o bem, insiste em dizer que ela est\u00e1 acabada. Maldade!<\/p>\n<p>C++ \u00e9 a rainha das linguagens de programa\u00e7\u00e3o para <em>system programming<\/em> e, junto com sua m\u00e3e, a linguagem C, reina absoluta. Embora, contestada de tempos em tempos, est\u00e1 longe de perder sua majestade. Quem acha que ela est\u00e1 sob risco definitivamente n\u00e3o a conhece direito.<\/p>\n<p><strong>Neste livro, apresentarei melhor C++, em sua melhor vers\u00e3o, a moderna.<\/strong> Para te tornar &#8220;da fam\u00edlia&#8221;, tamb\u00e9m falaremos, com respeito e defer\u00eancia, sobre a m\u00e3e dela, a linguagem C. Prepare-se para momentos de amor e \u00f3dio e, principalmente, para aprender a fazer coisas que s\u00f3 C++ te permite fazer.<\/p>\n<h2>Um pouquinho de hist\u00f3ria<\/h2>\n<p>C++ evoluiu bastante em suas pouco mais de quatro d\u00e9cadas de exist\u00eancia. Ela come\u00e7ou a ser projetada em 1979, na Bell Labs.<\/p>\n<p>No princ\u00edpio, C++ era apenas um pequeno <em>superset<\/em> de C (atente que C++ \u00e9 uma forma elegante de dizer &#8220;C incrementado&#8221;) e era suportada por um pr\u00e9-compilador chamado <em>Cfront<\/em>. Ou seja, c\u00f3digo C++ era transpilado para C e, ent\u00e3o, compilado por um compilador C regular.<\/p>\n<p>Os primeiros compiladores C++ capazes de gerar c\u00f3digo execut\u00e1vel, de forma independente, foram criados apenas anos mais tarde, por Bjarne Stroustrup, criador da linguagem, ainda na Bell Labs, e tamb\u00e9m pelo projeto GNU (GCC). Na sequ\u00eancia, a Microsoft tamb\u00e9m passou a fornecer uma alternativa, o Visual C++.<\/p>\n<p>Os esfor\u00e7os para &#8220;padronizar&#8221; a linguagem come\u00e7aram em 1989, atrav\u00e9s da forma\u00e7\u00e3o de um comit\u00ea ANSI. O primeiro <em>draft<\/em> da especifica\u00e7\u00e3o foi publicado em 1995. A primeira vers\u00e3o oficial surgiu em 1998 (C++98).<\/p>\n<p>Embora C++98 fosse uma boa especifica\u00e7\u00e3o, ela nunca foi plenamente implementada por nenhum dos compiladores populares. Pior que isso, compiladores diferentes ofereciam n\u00edveis diferentes de suporte a mesma, fazendo com que c\u00f3digo aceito por um compilador fosse recusado por outros.<\/p>\n<p>Em 2011, C++ recebeu uma importante atualiza\u00e7\u00e3o em sua especifica\u00e7\u00e3o, C++11, que s\u00f3 foi amplamente implementada pelos principais compiladores no final de 2013. Essa vers\u00e3o marca o in\u00edcio da fase &#8220;moderna&#8221; da linguagem.<\/p>\n<p>Novas vers\u00f5es das especifica\u00e7\u00f5es passaram, ent\u00e3o, a serem propostas e aprovadas em ciclos mais curtos. Temos C++14, C++17 e C++20.<\/p>\n<p><strong>Muito da m\u00e1 fama de C++ \u00e9 justificada pelos seus primeiros anos.<\/strong><\/p>\n<h2>Um choque de dois mundos<\/h2>\n<p><strong>Embora muita gente aponte C++ como linguagem de prop\u00f3sito geral, considero-a mais adaptada para programa\u00e7\u00e3o em n\u00edvel de sistemas (<em>systems programming<\/em>).<\/strong> Ou seja, para cria\u00e7\u00e3o de software que suporta outro software &#8211; como <em>compiladores<\/em>, sistemas operacionais, <em>engines<\/em> de jogos, <em>engines<\/em> de c\u00e1lculo, <em>engines <\/em>de automa\u00e7\u00e3o, <em>drivers<\/em> de dispositivos, entre outros.<\/p>\n<p><strong>C++ n\u00e3o me parece a melhor alternativa para desenvolver software em n\u00edvel de aplicativos.<\/strong> Ou seja, para cria\u00e7\u00e3o de software que suporta usu\u00e1rios diretamente &#8211; como aplica\u00e7\u00f5es <em>line-of-business<\/em>, processadores de texto, entre outros.<\/p>\n<h2>Por que tanta gente gosta de C++?<\/h2>\n<p>Programa\u00e7\u00e3o em n\u00edvel de sistemas geralmente exige bom conhecimento a respeito do funcionamento da m\u00e1quina. O objetivo \u00e9 fazer uso extremamente eficiente de recursos.<\/p>\n<p><strong>C++ \u00e9 uma linguagem comprometida em oferecer abstra\u00e7\u00f5es sem custos adicionais. Al\u00e9m disso, \u00e9 f\u00e1cil mapear um c\u00f3digo escrito em C++ com o que, de fato, acontecer\u00e1, durante a execu\u00e7\u00e3o.<\/strong><\/p>\n<h2>Por que tanta gente <span style=\"text-decoration: underline;\">N\u00c3O<\/span> gosta de C++?<\/h2>\n<p>Pessoas mais habituadas a programa\u00e7\u00e3o em n\u00edvel de aplica\u00e7\u00f5es, ou seja, criando software que atende diretamente usu\u00e1rios, dificilmente conseguir\u00e3o apreciar todo o poder de C++. Trata-se de uma quest\u00e3o de <em>mindset.<\/em><\/p>\n<p><strong>C++ n\u00e3o se coloca como obst\u00e1culo para realiza\u00e7\u00e3o de opera\u00e7\u00f5es avan\u00e7adas e em baixo n\u00edvel.<\/strong> Entretanto, tamb\u00e9m n\u00e3o protege de descuidos ou do simples desconhecimento. Em termos simples, C++ conceder\u00e1 todo poder computacional de que precisar, mas n\u00e3o ir\u00e1 lhe impedir de fazer besteiras (grandes, at\u00e9), se voc\u00ea n\u00e3o souber o que estiver fazendo.<\/p>\n<p>C++ n\u00e3o \u00e9 uma jovem senhora! Em &#8220;anos de computador&#8221;, C++ \u00e9 quase uma entidade mitol\u00f3gica que sobreviveu a eras. Tentar ler c\u00f3digos C++ com mais de 30 anos (como fontes de alguns compiladores e sistemas operacionais) pode provocar uma viagem no tempo que desavisados simplesmente n\u00e3o tem base para fazer.<\/p>\n<h2>Por que aprender C++?<\/h2>\n<p><strong>C++ \u00e9 \u00fatil, poderosa, moderna e continua evoluindo.<\/strong> Trata-se da op\u00e7\u00e3o padr\u00e3o para desenvolvimento de software em n\u00edvel de sistemas.<\/p>\n<p>A linguagem conta com bibliotecas extremamente poderosas e que continuam sendo desenvolvidas. A <em>stdlib<\/em>, por exemplo, oferece tr\u00eas abstra\u00e7\u00f5es impressionantes: <em>containers,<\/em> <em>iterators<\/em> e algoritmos.<\/p>\n<p>C++ permite gest\u00e3o facilitada e poderosa de recursos que os software utilizam, incluindo, arquivos, mem\u00f3ria, <em>sockets<\/em>,<\/p>\n<p>C++ oferece uma sem\u00e2ntica para <em><span style=\"text-decoration: underline;\">move\/copy<\/span><\/em>, garantindo a correta utiliza\u00e7\u00e3o de arquivos, mem\u00f3ria, <em>sockets<\/em>\u00a0de rede, etc. Dessa forma, a linguagem facilita a vida do programador na obten\u00e7\u00e3o de seguran\u00e7a, efici\u00eancia, flexibilidade, etc.<\/p>\n<h2>Para pensar!<\/h2>\n<p>C++ \u00e9 a linguagem mais usada no desenvolvimento em n\u00edvel de sistemas. Por isso, simplesmente n\u00e3o pode ser ignorada.<\/p>\n<p>Programar em C++ \u00e9 como dirigir um carro com motor absolutamente poderoso. Se o programador n\u00e3o for um &#8220;piloto&#8221;, dificilmente conseguir\u00e1 manter o &#8220;possante&#8221; na pista e, provavelmente, ir\u00e1 estourar o motor. Veja, o carro n\u00e3o tem culpa das limita\u00e7\u00f5es do motorista. A maioria das pessoas talvez se sinta melhor &#8220;andando veliz&#8221;, mas com alguma assist\u00eancia (e est\u00e1 tudo bem).<\/p>\n<p>Eventualmente, algumas pessoas entendem que poderiam obter um pouco mais de ajuda da linguagem. Outras, simplesmente, n\u00e3o pedem mais informa\u00e7\u00f5es. Se tiverem uma necessidade, buscam!<\/p>\n<p>Vamos aprender C++ moderno? Esperemos pelo pr\u00f3ximo cap\u00edtulo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Se C++ fosse uma pessoa, seria uma jovem senhora com pouco mais de 40 anos. Herdeira de fam\u00edlia tradicional, \u00e9 a filha mais famosa da linguagem C. De uma \u00e9poca onde a mem\u00f3ria dos computadores n\u00e3o passava de uma vaga lembran\u00e7a, foi constru\u00edda com \u00eanfase em excel\u00eancia na gest\u00e3o de recursos, acesso irrestrito a m\u00e1quina, [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":1843,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"hashtags":[],"tipo":[38],"url":[37],"apendices":[],"capitulos":[15],"class_list":["post-1838","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tipo-capitulo","url-permanente","capitulos-capitulo-0"],"_links":{"self":[{"href":"https:\/\/elemarjr.com\/livros\/cpp-moderno\/wp-json\/wp\/v2\/posts\/1838","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elemarjr.com\/livros\/cpp-moderno\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/elemarjr.com\/livros\/cpp-moderno\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/cpp-moderno\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/cpp-moderno\/wp-json\/wp\/v2\/comments?post=1838"}],"version-history":[{"count":12,"href":"https:\/\/elemarjr.com\/livros\/cpp-moderno\/wp-json\/wp\/v2\/posts\/1838\/revisions"}],"predecessor-version":[{"id":1852,"href":"https:\/\/elemarjr.com\/livros\/cpp-moderno\/wp-json\/wp\/v2\/posts\/1838\/revisions\/1852"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/cpp-moderno\/wp-json\/wp\/v2\/media\/1843"}],"wp:attachment":[{"href":"https:\/\/elemarjr.com\/livros\/cpp-moderno\/wp-json\/wp\/v2\/media?parent=1838"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/cpp-moderno\/wp-json\/wp\/v2\/categories?post=1838"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/cpp-moderno\/wp-json\/wp\/v2\/tags?post=1838"},{"taxonomy":"hashtags","embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/cpp-moderno\/wp-json\/wp\/v2\/hashtags?post=1838"},{"taxonomy":"tipo","embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/cpp-moderno\/wp-json\/wp\/v2\/tipo?post=1838"},{"taxonomy":"url","embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/cpp-moderno\/wp-json\/wp\/v2\/url?post=1838"},{"taxonomy":"apendices","embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/cpp-moderno\/wp-json\/wp\/v2\/apendices?post=1838"},{"taxonomy":"capitulos","embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/cpp-moderno\/wp-json\/wp\/v2\/capitulos?post=1838"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}