Chosen C++ はどのように開発されたのでしょうか? C++を学ぶにはどうすればよいですか?


ここに画像の説明を挿入します

1.C++とは何ですか

 C 言語は構造化されたモジュール言語であり、小規模なプログラムの処理に適しています。高度な抽象化とモデリングを必要とする複雑な問題や大規模なプログラムには、C 言語は適していません。ソフトウェア危機を解決するために、1980年代にコンピュータ業界はOOP(オブジェクト指向プログラミング:オブジェクト指向)という考え方を提案し、オブジェクト指向をサポートするプログラミング言語が登場しました。

  1982 年、Bjarne Stroustrup 博士は、C 言語に基づくオブジェクト指向の概念を導入および拡張し、新しいプログラミング言語を発明しました。C言語との起源関係を表現するためにC++と名付けられました。したがって、C++ は C 言語に基づいており、C 言語の手続き型プログラミング、抽象データ型を特徴とするオブジェクトベースのプログラミング、およびオブジェクト指向プログラミングを実行できます。

2. C++開発の歴史

  1979年、ベル研究所のベンジャニらがUnixカーネルを解析しようとした際、カーネルをモジュール化しようとしたため、C言語をベースに拡張し、クラス機構を追加し、実行可能な前処理プログラムを完成させた。 . 、それをクラス付きの C と呼びます。
 
次に、C++ の開発の歴史を見てみましょう。

ステージ コンテンツ
C とクラス クラスと派生クラス、パブリック メンバーとプライベート メンバー、クラスの構築と破棄、フレンド、インライン関数、代入演算子
C++1.0 仮想関数、関数と演算子のオーバーロード、参照、定数などの概念を追加します。
C++2.0 オブジェクト指向、新しい保護されたメンバー、多重継承、オブジェクトの初期化、抽象クラス、静的メンバー、const メンバー関数のサポートが強化されました。
C++3.0 さらなる改善、多重継承と対応する構築と破棄の処理によって引き起こされる曖昧さの問題を解決するためのテンプレートの導入
C++98 C++ 標準の最初のバージョンは、ほとんどのコンパイラでサポートされ、国際標準化機構 (ISO) と米国標準協会によって認められ、 C++ 標準ライブラリをテンプレート方式で書き直して STL (標準テンプレート ライブラリ) を導入しました。
C++03 C++ 標準の 2 番目のバージョンでは、主にエラーの修正と多様性の削減という言語機能に大きな変更はありません。
C++05 C++ 標準委員会はカウント レポート (テクニカル レポート、TR1) を発行し、その名前を正式に C++0x に変更しました。これは今世紀の最初の 10 年間にリリースされる予定です。
C++11 C++ を新しい言語に近づけるために、正規表現、範囲ベースの for ループ、自動キーワード、新しいコンテナー、リストの初期化、標準スレッド ライブラリなどの多くの機能が追加されました。
C++14 C++11 の拡張機能は、主に C++11 の抜け穴の修正と改善に重点を置いています。たとえば、汎用ラムダ式、自動戻り値型導出、バイナリ リテラル定数などです。
C++17 C++11 ではいくつかの小さな改善が行われ、static_assert() のオプションのテキスト情報、変数テンプレートの Fold 式、if ステートメントと switch ステートメントの初期化子など、19 個の新機能が追加されました。
C++20 C++11 以来最大のリリースであり、次のような多くの新機能が導入されています: ModulesCoroutinesRangesConstraintsおよびその他の主要な機能、および既存の機能の変更 更新: たとえば、Lambda はテンプレートをサポートし、範囲は初期化をサポートします、など。
C++23 定式化する

  C++ はまだ後方開発中です。ただし、会社の現在の主流の使用法は依然として C++98 と C++11 であるため、全員が最新のものを追い求める必要はなく、C++ 98C++11をマスターすることに集中してください。 C++ の理解は深まり続けており、更新された機能について検討するには時間がかかります。
C++2X の最新機能に関するディスカッション

3. C++の重要性

3.1 言語の広範な使用

以下の図のデータは、2023 年 9 月の TIOBE プログラミング言語コミュニティの最新ランキング リストからのものです。30 年以上の開発の中で、C/C++ はほぼ満場一致でトップ 5 にランクインしています。
ここに画像の説明を挿入します

ここに画像の説明を挿入します
TIOBE プログラミング言語コミュニティ ランキングは、プログラミング言語の人気傾向を示す指標であり、毎月更新されます。このランキングは、インターネット上の経験豊富なプログラマー、コース、サードパーティ ベンダーの数に基づいています。ランキングは、Google、MSN、Yahoo!、Wikipedia、YouTube、Baidu などの有名な検索エンジンを使用して計算されます。
注:ランキングはどの言語が良いか悪いかを示すものではなく、各プログラミング言語には独自のアプリケーション シナリオがあります。

3.2 仕事の分野において

  1. オペレーティングシステムと大規模システムソフトウェア開発
     . ほとんどのオペレーティングシステムはC/C++で書かれています Photoshop、Office、JVM(Java Virtual Machine)など、大規模なソフトウェアの多くはほぼC++で書かれています。高性能で、ハードウェアを直接制御できます。
  1. サーバーサイド開発
     バックエンド開発: ビジネスロジックの処理、つまりフロントエンドのリクエストにバックエンドが応答することに主眼が置かれている 現在はJavaが主流だが、その進化は深刻である 大手メーカーではC++バックエンド開発を行っている場合もあり、主にこれを行っているいくつかの基本コンポーネント、ミドルウェア、キャッシュ、分散ストレージなど。サーバーサイド開発はバックエンド開発に比べてバックエンド開発も含めた広範な開発であり、ゲームサーバーやストリーミングメディアサーバー、ネットワーク通信などリアルタイム性の要求が高いものはすべてC++で開発されるのが一般的です。
  1. ゲーム開発:
     World of Warcraft、Legend、CS、Kart Racing など、PC プラットフォーム上のほぼすべてのゲームは C++ で書かれています。市場に出ているかなりの数のゲーム エンジンが C++ に基づいて開発されています。Cocos2d、 Unreal 4、DirectX はお待ちください。3D ゲーム分野の計算量は膨大であり、その基礎となる数学はすべて行列変換であり、美しいグラフィックス、リッチなコンテンツ、リアルタイムのゲーム パフォーマンスを求める場合、これらを実現するには C++ 言語を選択するしかありません。高難易度の要件。比較的有名なメーカー: Tencent、NetEase、Perfect World、Giant Network など。
  1. 組み込みおよびモノのインターネットの分野での
    組み込み: 機械デバイスまたは電子デバイス内にコンピューティング機能を備えたメイン制御ボードを組み込み、これらのデバイスを制御することです。例: スマートブレスレット、カメラ、掃除ロボット、スマートスピーカーなど。
     組み込み開発というと、誰もが最も思い浮かべるのはマイコン開発(つまり、8ビット、16ビット、または32ビットのマイコン製品またはベアメタルで行われる開発)です。 SOC オンチップ、システム レベル、ドライバー レベル、アプリケーション、およびミドルウェア レベルの開発も含まれます。
     一般的な職種は、組み込み開発エンジニア、ドライバー開発エンジニア、システム開発エンジニア、Linux開発エンジニア、ファームウェア開発エンジニアなどです。
     Huawei、vivo、oppo、Xiaomi に代表される携帯電話メーカー、Unisoc、Espressif Systems に代表されるチップ メーカー、DJI、Hikvision、Dahua、CVTE などの有名メーカーは、独自の端末ビジネス メーカーを持っています。ハイアール、ハイセンス、格力などの伝統的な家電業界と同様。
     5Gの普及に伴い、モノのインターネット(つまり、すべてのインターネット)も台頭しており、例えば、Alibaba Lot、Tencent Lot、JD.com、Baidu、Meituanなどがハードウェア関連のビジネスを展開しています。単位。
  1. デジタル画像処理デジタル
     画像処理には多数の数学的行列演算が含まれており、比較的高い CPU 計算能力が必要です。主要な画像処理アルゴリズム ライブラリとオープン ソース ライブラリは、OpenCV、OpenGL などの C/C++ で書かれています。有名なものでは、Photoshop は C++ で書かれています。
  1. 人工知能
     について言及されるとき、誰もが最初に頭に浮かぶのは Python です。人工知能を学ぶには Python を学ぶ必要があると考えられています。これは誤解です。Python には豊富なライブラリがあります。Python を使用すると、ニューラル ネットワークを作成し、パラメーターを入力し、データをインポートして開始すると、モデルがトレーニングされます。しかし、深層学習アルゴリズムなどの人工知能の背後にある中核は、依然として C++ で書かれています。

  1.  近年、モバイル インターネットの台頭により分散アプリケーションが登場し、各アプリケーションのデータ量は増加し続けており、ビッグ情報時代の到来に対応するために、バックエンド アーキテクチャのパフォーマンスと同時実行能力を継続的に向上させる必要があります分散分野では、多くの分散フレームワーク、ファイル システム、中間コンポーネントなどが C++ で開発されています。分散コンピューティングに大きな影響を与える Hadoop エコシステムのいくつかの強力なコンポーネント (HDFS、Zookeeper、HBase など) も、Google によって C++ で実装された GFS、Chubby、BigTable に基づいています。分散コンピューティング フレームワーク MapReduce を含め、Google は最初にこれを C++ で実装し、その後、オープンソースの Java バージョンが登場しました。

上記の分野に加えて、科学計算、ブラウザ、ストリーミング メディア開発、ネットワーク ソフトウェアなどはすべて C++ が適しているシナリオであり、古い言語の常緑樹として、C++ は常に上位 5 つのプログラミング言語を占めています。他者でなければならない、存在価値。

4. C++の学習方法

ここに画像の説明を挿入します

4.1 上司から学ぶにはどうすればよいですか?

以下は、「Programmer」の 2010 年 8 月号に掲載された謙虚な記事「Behind the Power of C++」の最後の段落からの引用です。 C++ の欠点の 1 つは、多くの言語よりも複雑で、難しいことです
 。学び、マスターすること。C 言語を学ぶには K&R の「C プログラミング言語」を一冊読めばいいと言う人が多いですが、C++ の本は数え切れないほどあります。私はCからC++に入り、本を読んですべて独学で学びました。ここで学習体験を共有してください。個人的には、C++ の学習は 4 つのレベルに分けられると考えています。

  1. 最初のレベルの C++ 基礎では、 (通常は) 「 C++ Primer」、「C++ University Tutorial 」、またはStroustrup が書いた古典的な「 C++ Programming Language 」、または彼の新作「 C++ Program」などの
     入門書を選択します。1年半前の「設計の原則と実践」、および一般的な C++ コースもここで終了します。さらに、「C++ 標準ライブラリ」および「C++ 標準ライブラリ拡張機能」も参照できます。

  2. 2 番目のレベルは、C++ を正しく効率的に使用する(それに慣れる) ことです。
     このレベルでは、独学で「(More)Effective C++」、「(More)Exceptional C++」、「Effective STL」、「 」を読む必要があります。 C++ プログラミング標準』など。プロフェッショナルな C++ 開発の道を歩み始めるのに適しています。

  3. 3 番目のレベルでは、C++ (素晴らしい)の詳細な解釈について、グローバルな問題について、「 C++ オブジェクト モデルの詳細な探索」、「不完全な C++」、「C++ の瞑想」、および「STL ソース コード」
     を読むことができます。IQ に挑戦するには、「 C++ テンプレート」、「 C++ 設計の新しい考え方」、「 C++ テンプレート メタプログラミング」などのテンプレートとテンプレート メタプログラミングに関する書籍について読むことできます

  4. 4 番目のレベルは、C++ を学習し(本来の性質に戻る)、
     「C++ 言語の設計と進化」、「プログラミングの本質」(STL 設計の背後にある数学的基礎を含む)、およびC++ 標準ドキュメント「ISO」を読みます。 /IEC 14882:2003"****、C++ 標準委員会の提案と報告書、C++ に関する学術文献。私は主に C++ を使用するので、おそらく 2 つ目か 3 つ目のレベルにとどまっています。ただし、C++ はソフトウェア開発の一部にすぎず、言語だけではビジネスやエンジニアリングの問題に対処できません。「C++の知識を数年で徹底的に学ぶ」ということに固執せず、2級レベルになったら実務経験から学び、興味があれば少しずつ上位レベルの知識を学び続けることをお勧めします。C++ を学ぶのは難しいですが、とても面白くて充実しています。

http://www.zhihu.com/question/23933514上記は、 21 日間で C++ を学習できる
ここに画像の説明を挿入します
という一部の上級プログラマーの嘲笑です「C++ に習熟する」を 1 年間の目標として捉えるのではなく、言語の学習を継続的なプロセスとして捉え、同時にその言語を特定の応用場面で使用する必要があります。「プログラミング能力と年齢」 」

4.2 独学で学ぶ方法

インターネット上では「C++ は最も難しいプログラミング言語の 1 つである」と言われていますが、残念ながらこれは真実です。しかし、心配する必要はありません。C++ の構文機能は複雑で、古典的な本は数多くありますが、一生懸命努力すれば、「明るい未来」を手に入れることができます。
次にC++の学習方法を紹介します!

C++ を学ぶポイントは 3 つあります。「もっと要約する」「よく本を読む」「質問に答える」です。最後のことについては話しません。すべてを学ぶ必要があります。最初の 2 つは同じではないかと疑問に思う人もいるかもしれません。
こうなると、話すべきことがある。C++ は C をベースに開発されたため、C の多くの欠点が解決されました。しかし、歴史的な理由と、C++ が開発初期にはまだ非常に貧弱だったという事実により、開発プロセス中に必然的に多くの落とし穴が埋もれてしまいました。何年も開発が続けられてきたのに、なぜその穴を埋めないのかと疑問に思う人もいるかもしれません。そういえば、もう一つ触れてはいけない話があります。Python 2.0 には設計上の欠陥や矛盾などの大きな問題があったため、Python 委員会は 2008 年に Python 3.0 を立ち上げました。しかし、このバージョンは Python 2.0 と互換性がなかったため、Python 委員会が発足しました。当時は集団襲撃を受け、立ち直るまでに5~6年かかった。したがって、言語の最適化は通常、古いバージョンと互換性があり、C++ には多くの落とし穴や注意が必要な詳細があり、概要も重要です。
最後に、本を読むべきかどうかという古い質問があります。C 言語やデータ構造とは異なり、関連する構文を理解して使用できるようにするだけで十分なため、本を読まなくても十分に学習できます。しかし、C++ は異なります。C++ は底辺に近く、柔軟性が高いため、読むことと読むことの差は非常に大きくなります。(ブロガーが言及したばかりなので、これ以上は言いません。ここでブロガーは、C++ に関する 3 つの必読の古典本について言及しています。それは、『Effective C++』、『C Primer』 (文法辞書として使用)、および『STL』です。ソースコード分析』.3 冊は非常に重要です!!!)

それぞれの部分の作り方を簡単に見ていきましょう!

  • さらに詳しい概要

    • ブログを書く:
      ブログを定期的に書くことは、学習プロセスや知識ポイントの理解を記録できるだけでなく、復習のための魔法の武器にもなります。
    • 中期以降のマインドマップ描き方まとめ
      ここに画像の説明を挿入します

  • 私はよくインターネットで本を読んでいるのですが、初心者向けに「 C入門」を勧めている人をよく見かけます。この本が良い本であることは否定できませんが、初心者にはまだ適していません。

    • まずは
      ここに画像の説明を挿入します
      扉を開く 入門段階では、すぐに始められるシンプルで薄い本を探しましょう 上記の本はどちらでも大丈夫です。ブロガーおすすめの「高品質プログラミングガイド」は、C++ の文法的特徴を簡単かつ迅速に理解するのに最適です。
    • 練習に専念する
      ここに画像の説明を挿入します

    C++ の半分以上を学習し、おそらく継承とポリモーフィズムの学習を終えた後は、「Effective C++」を読むことをお勧めします。この本 ** では、推奨される方法でより良い C++ プログラムを作成する方法が説明されています。大きな違いがあります。読むか読まないかの間** 。
    C++ のコース体系を修了した後、時間に余裕があれば「C++ プログラミングの考え方」を読んで、学んだ知識を統合することもできます。
    C++ Prime」は参考書として扱うことができ、文法的に不明な点があればすぐに確認することができるので、仕事後の空いた時間を利用してゆっくり味わうのがおすすめです。

    • どちらの本もわかりやすく説明する
      ここに画像の説明を挿入します
      のが難しいので、基礎知識がしっかりと身についていない方は読むことはお勧めできませんが、基礎知識をしっかりと固めることを強くお勧めします。
      STL ソースコード分析」は、6 つの主要なコンポーネントを 1 つずつ分析します。これを読むと、STL の設計フレームワークと内部実装原則についての理解が深まります。面接で面接官と簡単に競争できるようになります。 。
      C++ オブジェクト モデルの詳細な探索」では、C++ 構文の設計原則をより深く理解できます。これを読むと、いくつかの混乱した知識ポイントが明確になります。
  • 質問を頻繁に勉強する

さて、このブログはこれで終わりますが、お役に立てば幸いです。
ここに画像の説明を挿入します
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/Zhenyu_Coder/article/details/133036142