Open3

C++を学ぶ

nasumnasum

まえがき

今更ながらC++を学んでいこうと思い、スクラップを作りました。
仕事でChromeDriverを触っているのですが、これがC++製なんですよね。でChromeDriverのバグだか仕様だかはわからないのですが、度々謎の挙動に悩まされるので、それの原因特定をある程度できたらなと思い学び始めようと思いました。
ChromeDriverのコードを全部読もうというわけではなく、問題のエラーメッセージをgrepしてそれがどういうタイミングで起きるのかを把握できればいいので、少なくとも読めるようにはなりたいという気持ちです。

教材

教材は本を買ってもよいのですが、あまり度の本が良いかもよくわからないのでとりあえずC++で有名な江添さんのC++入門サイトをまずはやっていこうかと思います。
https://ezoeryou.github.io/cpp-intro/
目次からしてもすごい量なので、一旦これを読み切ってから次どうするかは考えます。

学習の記録

学習の記録はスクラップにつらつらと書いていく予定です。コードとかは以下のリポジトリに投げていこうかと思っています。
https://github.com/nasum/cpp_study
毎日それなりにできればいいと思いますが、一旦やりきることだけを目標にのんびりやっていく予定です。

さて、頑張ろう。

nasumnasum

20220812

https://ezoeryou.github.io/cpp-intro/#序

本書はプログラミングの経験はあるがC++は知らない読者を対象にしたC++を学ぶための本である

自分が対象読者であることを認識。

本書はいわばC++における知識のブートストラップを目指した本だ。これにより読者は本を先頭から読んでいけば、まだ学んでいない概念が突如として無説明のまま使われて混乱することなく読み進むことができるだろう。

先頭から読んでいけばいいのでわかりやすい。

著者自身も苦しい思いをしながらできるだけ今までに説明した知識のみを使って次の知識を教えるように書き進めていった結果、意外な再発見をした。ポインターを教えた後はC++のほとんどの機能を教えることに苦労しなくなったのだ。

やはりポインターが要の模様。一番躓くとはよく聞く。

C++の概要

https://ezoeryou.github.io/cpp-intro/#C++の概要

Simulaは知らなかった、SmallTalkは一応知っていた。

C++はC言語にSimulaのプログラム構造化の機構を取り付け効率性と柔軟性を提供する言語だとか。

委員会方式の国際標準規格というのも面白い。下位互換をできるだけしないように作られているらしい。

そしてここでもディスられるPythonの2と3に関する問題。どこでも話題になる。

簡単な1つのソースファイルからなるプログラムの実行

https://ezoeryou.github.io/cpp-intro/#簡単な1つのソースファイルからなるプログラムの実行

C++のコードを書いてコンパイルする

all.hを作ってコンパイルしたけど、

./all.h:11:10: fatal error: 'cstdalign' file not found
#include <cstdalign>
         ^~~~~~~~~~~

とでた。

https://docs.microsoft.com/en-us/cpp/standard-library/cstdalign?view=msvc-170

この記事によるとC++17で非推奨になっていてC++20で削除されているらしい。

不要みたいだしコメントアウトしておく。

コンパイルは通って実行可能なファイルが作成された。バイナリファイルは個人的に好き(どうでもいい

一旦今回までの成果物はこれ

https://github.com/nasum/cpp_study/tree/main/20220812

nasumnasum

20220905

Make: ビルドシステム

makeの解説と実際にプログラムをビルドするMakefileの作成。

makeは雰囲気でしか使ってなかったので自動変数あたりが勉強になった。

C++ヒッチハイクガイド

変数や関数について学んだ。ラムダ式が面白い。autoを使うと何でも受け入れられる関数が作れるのが意外だった。

条件分岐の果てのレストラン

ここは割と普通。今まで使っていたプログラミング言語で慣れ親しんだ条件分岐を学んだ

ループ

ここも慣れ親しんだ繰り返し処理を学べた。gotoは古典的であまり見ないけど使うこともないだろう。