読者です 読者をやめる 読者になる 読者になる

公開されている C++11の文法と機能 をKindleファイルへ変換してみた

ここ何年もC++は使ったことがなかったが、偶然 本の虫: C++11参考書の公開:C++11の文法と機能 を発見。 https://github.com/EzoeRyou/cpp-bookで内容が公開されているとのことであるので、kindle.rb の使い方を思い出すのも兼ね、Kindle形式(mobiファイル…

C++再考 第2部 動機

第4章に『クラス製作者のためのチェックリスト』として、クラス設計にあたって考慮すべきポイントがうまくまとめてあります。 コンストラクタは不要ですか データメンバはプライベートですか 引数なしのコンストラクタはありますか 全てのコンストラクタが…

C++再考 第1部 動機

Accelerated C++でも使われてたこの文から始まります。 抽象とは選択的な無視のことです 2.1.2 ソフトウェア工場? 第1部は導入部で事例紹介などがありますが、2章に『2.1.2 ソフトウェア工場?』として ソフトウェア工場の考え方は、物を作るという行為と…

C++再考−アンドリュー・コーニグ

Accelerated C++の著者の本である「C++再考」を読み始める。 書かれた時期が96年と古いため、掲載されているソースコードには一部古さを感じさせる部分(など)もあるけれど、単独でみれば今でも十分読む価値はある。 ただし、現時点ではC++の本も多く、個人…

VC2005のifstremで日本語ファイル名を使用する

C++

普段の「ちょっとしたツール」を使うのに使用する言語をC++で書いているのだけれど、ファイル入出力は手馴れたfopen/fread/fcloseで処理でこなしてました。 昨日やはり数十個のファイルを処理する必要に駆られ、この際だからifstreamで書いてみたところ、漢…

独習デザインパターンC++−テクノロジックアート

C++

以前買ったデザインパターンの本を読み始める。まえがきにあるとおり、C++でプログラムがかかれているため、なかなか良さそう。 第2部から実際のデザインパターンが始まるのだけれど、(当たり前ですが)それぞれの独立性は高いので一日一つといった読み方…

これからどうするか

C++

9月から Accelerated C++ Effective C++第3版 Effective STL Effective C++改訂2版 と読み進めてきたけど、ここからどうするか。 ロベールで包括的な復習 再読による復習 オブジェクト指向へ(Meyer本) デザインパターン(この前買ったやつ) STL/boost…

EffectiveC++改訂2版 46項〜50項

最終章。 46項 結論として、エラーをランタイムに検出するのは、コンパイル時やリンク時に行うよりも、要するに信頼性が劣るということになる。 普段、周りで作っているプログラムは、ランタイムエラーの検出すらできていないケースが多いのが何とも。。 47…

EffectiveC++改訂2版 35項〜44項

6章。 オブジェクト指向は実使用したことがないだけに、概念的な理解しかできていないと思う。今度Meyerの本でじっくり勉強しよう。Smalltalk勉強会もあることだし。。 35項 public継承の肝 public継承は、「その一種である」という関係[英語で言うと"is-a…

EffectiveC++改訂2版 32項〜34項

5章の残り。 32項 変数定義の「場所」についてはC++で書くようになってから「直前」に移動しているが、コンストラクタ、デストラクタのコストについての意識が薄かった。 要点は2つ。 変数の定義は、その変数を使う直前になるまで遅らせるだけでなく、初期…

EffectiveC++改訂2版 29項〜31項

『第5章 クラスと関数:その実装』だけれども既知の事項で復習をしている感じ。自分自身に蓄積ができつつある感触は悪くないですね。 29項 内部データのハンドル(ポインタ、参照)を返すなということ。第3版では、この手のリソースは専用のハンドルクラス…

C++のベースとなるC言語についての覚書

C++

C言語について改めて整理。 規格 K&R ANSI C89: 以降はISOへ ISO C90: ANSI C89と同じ C95: Amendment. ワイドキャラクタの扱い C99 JIS X3010-1993: C90と同じ X3010-2003: C99と同じ Cの起源にまつわるリンク 本家ベル研 Dennis M. Ritchie Chistory Ken T…

EffectiveC++改訂2版 22項〜28項

Smalltalk勉強会に向けての予習のため休んでいたEffectiveC++改訂2版の勉強の再開。 22項 リファレンス渡しは素晴らしいが、独特の複雑さを伴う。特に悪名高いのは17項で説明したエイリアシングの問題である。 これは身に付いている。 23項 アルバートアイン…

EffectiveC++改訂2版 第17項〜第21項

17項 AcceleratedC++でも何度も注意されていた「自己代入」のチェック。ほとんどの場合、this と &rhs の比較で判定すれば良い。 エイリアシングの可能性を考慮しなければいけない理由 効率:代入は非常にコストがかかる操作になる場合がある 安全:間違いを…

EffectiveC++改訂2版 14項〜第16項

第14項 継承で利用する基底クラスの仮想デストラクタの話。AcceleratedC++でもおなじみ。 第15項 代入演算子。これもAcceleratedC++でおなじみ。 よくある間違い operator= の戻り値を void にする operator= の戻り値を const オブジェクトのリファレンスに…

EffectiveC++改訂2版 第9項〜第13項

第9項 メンバ関数の定義による隠蔽の話。50項では継承関係の中での話しだが、ここでは operator new() の話。 第10項 63ページにあるBLOCK_SIZEの定義はなぜか1項では「古い」とされている形式。 かつ、ここの説明での operator delete() の形式も古い形式の…

EffectiveSTL読了

AcceleratedC++ -> Effective C++ -> Effective STL と来て多少はC++らしいプログラムが書けるようになってきたように思うが、なにぶんこのところ記述量が少なすぎて、実感が持てない。

EffectiveC++ 改訂2版を読み始める

本棚に埋もれていた第2版をこれまでの復習を兼ねて読み始める。 第3版に比べ、Cからの移行の章があったりして時代を感じさせますね。こちら側が丁度良い位なのが淋しいですが。 1項から7項 このあたりはすいすい読み進められる。 8項 非メンバ、メンバのnew/…

EffectiveSTLを読み始める

5項で「copyを使いすぎるプログラマが多い」とあるけど、この項の最初の質問に対してはcopyとback_inserterを考えてしまってた。 23項くらいまでぽちぽち読み進める。

Effective C++

C++

一応読了。でも身に付いた感じがしないのは、実際に使ってないからだろうな、たぶん。今度は実際にコードを書きながら復習してみよう。 でもEffective STLも面白そうだし、boost本も。。

unix time と2038年問題

C++

「不正な時刻が悪さをする」ということで聴いてみると、いわゆるunix timeとして正しく扱えないということのよう。ライブラリがエラーを返すらしい。とあるRTOSの開発環境の話であるけれども、手元にコンパイラでどうなるか調べてみました。 Visual C++ 2005…

Effective C++

C++

30項くらいまでパラパラと。 使いこなしのヒントなので、使わないとだめだなと思う。当たり前ですが。 RS232Cで接続された機器とのやりとりを簡単にできるスクリプト言語を作ってみようかな。MS-DOSのころはまだしも、Windowsになってちょっと面倒になった…

Accelerated C++第15章の疑問解消

実装クラス(Pic_base)で、ハンドルクラス(Ptr)をfriend宣言すればOKでした。 cppll_novice MLに感謝。(でもへんな投稿にしてしまった orz)

次は

C++

Effective C++にしよう。

Accelerated C++第15章に対する疑問

p274の訳注*1に疑問あり。 仮想デストラクタをつけたとあるが、仮想になっていない 仮想だろうが、仮想でなかろうが、privateデストラクタなのでコンパイルできない 原文にあたれないけれど、 継承を使い、派生クラスのポインタをdeleteしているので、本来は…

Accelerated C++第16章

2005年に続いて、2回目読了。 お言葉 本棚に本を置いても、プログラマの腕は上がらない もっと学ぼう プログラミング言語C++ 第3版 STLによる汎用プログミング C++再考 本棚をざっと見るとC++関連では ロベールのC++入門講座 ロベール プログラミング…

Accelerated C++第15章

文字絵の例でインタフェースと実装の分離、実装部分のカプセル化について説明している。実装部分のカプセル化については、コンストラクタなどをprivateにすることで隠しているわけだが、その分多くのfriendが必要になってしまってて、正直そこまでのカプセル…

Accelerated C++第14章

お言葉 2つの独立した抽象クラスであるべきものを1つのクラスにするということは、しばしばデザインの弱さを示しているのです。 ハンドル オブジェクトへのポインタを保持する ハンドルが結び付けられているオブジェクトの型とは独立している ポインタと同…

Accelerated C++第13章

初歩的なハンドルクラスが出てきて面白くなってきた。 派生クラスのオブジェクトの生成 派生クラスのメンバも基底クラスのメンバも同様に全オブジェクトの分のメモリを確保 基底クラスのコンストラクタを実行し、オブジェクトの基底クラス部分を初期化する …

Accelerated C++第12章

3のルールの変形 一般に、デストラクタが必要でないクラスでは、コピーコンストラクタと代入演算子もわざわざ書く必要はない メンバ関数にすべきものとそうでないもの 入力、出力演算子ははメンバ関数にできない friend 宣言 クラス定義のどこに書いてもか…

allocatorクラス

C++

ヘッダにある、allocatorクラス。 これの動きは メンバ関数 construct() はコンストラクタ呼び出し メンバ関数 destoy() はデストラクタ呼び出し 非メンバ関数の uninitialized_copy() はコピーコンストラクタを呼び出す 非メンバ関数の uninitialized_fill(…

Accelerated C++第11章

std::vector に相当する Vec を定義する話。 explicit 引数が一つだけのコンストラクタのみに適用できるもの。明示的にコンストラクタ呼び出しが必要なことを指定するもので、非明示的な変換によるコンストラクタ呼び出しを防止する。詳しくは12章へ。 演…

Accelerated C++第10章

ポインタはランダムアクセス反復子の一種 n 要素の配列 a に対し a + i が有効なのは 0≦i≦n のとき a + i が要素を指すのは 0≦i<n のとき a + n は最後の要素の1つ後(container.end() と同じ) 文字列リテラルとは文字数より1つ大きいサイズの const char…

Accelerated C++第9章

一通り15章まで読んでしまったので、落穂拾い的なメモ constキーワードはメンバ関数の宣言と定義の両方に必要 オブジェクトの状態を変える関数はメンバ関数とする 一般に内部を公開するつもりの小さなデータ構造ならstructを使う クラスオブジェクトの生成…

iteratorを引数にするジェネリック関数 iterator_traits

C++

例えば2つのイテレータを受け取って平均を返す関数を書こうとすると、イテレータが指し示す型の情報がないと作れませんね。 こんなときは iterator_traits というものを使って書くようです。 例えば平均値を求める関数を書いてみると、次のようになります。…

前置・後置のインクリメント、デクリメント/oprator++() operator--()

C++

Accelerated C++の中で変数をインクリメントする場合で、その値を使用しない場合はすべて前置のインクリメント演算子が使用されています。 for (int i = 0; i < 10; ++i) 僕自身はC言語を覚えてから標準では後置のものを使用していますが、どちらが多いので…

std::endl

C++

これまで、何となく気持ち悪いと思いつつ std::endl を使ってきました。 この気持ち悪さというのは「単に改行をしたい」という場合と「バッファフラッシュをしたい」場合は異なるということ。 std::endl の実装では、 // Microsoft Visual Studio 2005 い含…

Accelerated C++ 第8章

反復子 全部で5種類 入力反復子 出力反復子 前方向反復子 双方向反復子 ランダムアクセス反復子 入力反復子 vector<int> v; copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(v)); 出力反復子 copy(v.begin(), ve.end(), ostream_iterator<int>(cout, </int></int></int></int>…

C++0xとかTR1とかATL/CLRとかいろいろあるようだ

C++

Visual Studio 2008からTR1を取り込んでいるとか世の中的には動いている模様。 これまでBorland C++を使用してたけど、何件かトラブルが続いてやや信頼感が低下。 C++ BuilderのGUIアプリ作成の簡便さは捨てがたいけど、やっぱり.NETからC#への流れなのかな…

STL関連の情報メモ

C++

STL超入門 http://www.jah.ne.jp/~naoyuki/Writings/STL.html Standard Template Library プログラミング on the Web http://www005.upp.so-net.ne.jp/episteme/ Rogue Wave Software 標準 C++ ライブラリ・ユーザーズガイド http://docs.sun.com/source/820…

Accelerated C++の7章まで

C++

ここまでで一通りSTLを学んだことになる。 ファイル入出力が(エラー・ログ含む)標準入出力だけなので、用途は限定されるものの、日常のテキストベースのプログラムは書ける。 ファイル入出力も ifstream / ofstream オブジェクトを生成すれば、テキストフ…

Accelerated C++ 第7章

連想コンテナ awkで慣れてるので特に目新しくはない。 ただ、 連想コンテナの要素はいつもキーに従って配列させられている は知らなかった。 nrand() 他でも使えそう。 課題 省略。

Accelerated C++ 第6章 続き

関数を表すパラメータ定義 慣れてないので気持ち悪いが、明示的にポインタで定義しなくても良い。 アルゴリズムの関数を使い始めると、結構関数(のポインタ)を引数に渡すことが多くなりそう。 課題 本中のソースに関連するもの、面白いくないものはばっさ…

C++の使いこなし

C++

Cに比べ、標準ライブラリが膨大。普段のプログラミングで使う範囲のものを覚えるまでが大変。ひたすら使いまくるしかないのだろうけど。 それまではヘルプで確認しつつ。

Accelerated C++ 第6章

さらにC++らしく。 ジェネリックアルゴリズム うまく使いこなせるとプログラムの記述量が減るのと、完成までの時間が短くなりそう。 使いこなせるまでが大変そうだけど。 反復子アダプタ 一番使われるらしい、back_inserter を覚えておこう。今日はここま…

Accelerated C++ 第5章

通勤電車の中で読み進めてるので課題ができない状態。TT 反復子 C++らしく(?)なってきた。 以前読んだときは今ひとつなじめなかったが、今回はすんなり入る(ように思う)。 標準ライブラリのコンテナの反復子は2種類 コンテナの型::const_iterator …

Accelerated C++ 第4章

見出しのつけ方をちょっと変更。 constでない参照パラメータ const参照のパラメータが時間的、空間的な効率の点は良いとして、「constでない参照パラメータは左辺値でなければなりません」というのは実装依存だろうか? コンパイラによってエラーにするかど…

Accelerated C++ 第3章 課題残り

3-3 vectorを2個使用して、単語そのものと、出現回数用の2個vectorを使う。でも連想配列(map)を使うのが素直。まだ出てきてないですが。 #include <iostream> #include <string> #include <vector> using std::cin; using std::cout; using std::endl; using std::vector; using std::</vector></string></iostream>…

Accelerated C++ 第3章

vector Cの配列よりは使いやすいコンテナクラス。 サイズに拡張に伴うメモリ割付などを面倒みてくれるが、組み込み機器で使うのはどうなんだろうか。実メモリシステムだとフラグメンテーションが怖い。(といいつつまだ遭遇したことはないわけだけど) 3.2.3…

Accelerated C++ 第2章

このあたりはざっと流して行きたいけど、課題を丁寧にやってると結構時間がかかるな。 ループの不変量(Loop Invariant)、不変な表明 「不変な表明」は、契約による設計への「不変条件」の意味か。 invariantそのものには不変量、不変式の意味があり、おぼろ…