C++

C++ イテレータ入門

C++

ここでは C++ の STL などで使われているイテレータというものについて簡単に説明します その前に 新人さんは仕事でのコードで独自のコンテナやイテレータを書いてはいけません それぞれのプロジェクトでは必ず使ってよいとされているコンテナなどは予め決ま…

C++ キャストの意味と危険性

C++

C++ の3つのキャストは Cスタイルのキャストの持つ3つの側面をそれぞれ独立させたものです static_cast static_cast はセマンティクスを維持したまま型を変えたいときに使います static_cast はビットパターンを変更する場合があります static_cast は変換…

C++ エイリアスと最適化の危険な関係

C++

エイリアス エイリアス(alias) とは別名という意味です 何の別名かというと lvalue の別名ということです他のオブジェクトのインスタンス(実体)を参照しているものがエイリアスです文法的にはポインタと参照がエイリアスです lvalue と rvalue エイリアス…

stringprintf

C++

stringprintf ここでよく出てくる stringprintf というのは std::string用の sprintf ですデバッグ用です 例えば次のような使い方をしますが別にわざわざこんなものを用意しなくても printf で構いません OutputDebugString( tstringprintf( _T("%d\n"), n )…

C++ namespaceを使って既存のテンプレートをカスタマイズ

C++

namespace をうまく使うと既存のテンプレートをきれいにカスタマイズすることができます std::map と文字列の自然順比較 std::map のキーに std::string を使うとその要素はデフォルトでは辞書順に並びます これを自然順に並ぶようにするにはどうすればいい…

C++ テンプレート引数に応じた場合分け

C++

テンプレート内でのマルチバイト文字とワイド文字の扱いを例に、テンプレート引数に応じた場合分けを実現する方法について説明します テンプレート引数に応じて何か処理を分けたいというときには、その場合分けを別のテンプレートに追い出すことで実現できま…