タグ

ブックマーク / qiita.com/rinse_ (6)

  • C++演算子オーバーロード大全 - Qiita

    はじめに この記事ではC++の演算子のオーバーロードを使い慣れていない人の為のまとめとして作成しました。 C++の演算子のオーバーロード、引数や戻り値に自由が利きすぎてどうするのがセオリーなのか分からないぞ、というようなときに見て頂けたらと思います。 主に引数や戻り値を中心に据えますが、細かい機能も網羅していきたいと考えています。 私は二項演算子はグローバル関数教の信徒であり、const教の敬虔な信徒です。 優先順位の順に、演算子別に解説します。 なお、thisの型を T* const型とし、Tとは別の任意の型をUとしています。 では、早速解説していきたいと思います。 Member Selection メンバ選択演算子。ドット演算子はオーバーロードできないので、載せるのはアロー演算子だけになります。この演算子はメンバ関数でなければなりません。また、演算子の文脈で使うにはアロー演算子を持った

    C++演算子オーバーロード大全 - Qiita
  • Boost.Rangeってなに - Qiita

    Boost.Rangeが流行っている気がするので解説します。それぞれの細かい機能についてはリファレンスを見てね。この記事はBoost.Rangeが分からない人、特に全く知らない向けの記事になっているため、boostが1ミリも分からなくても読める記事になっているつもりです。なお、私がこの記事を書く上で使用したBoostのバージョンは1.60.0です。リファレンスは以下です。URLをちょっといじれば好きなバージョンに飛べると思います。 http://www.boost.org/doc/libs/1_60_0/libs/range/doc/html/ なお、標準ライブラリのアルゴリズムヘッダも参照のこと。 http://en.cppreference.com/w/cpp/algorithm Boost.Rangeとは イテレータ対(iterator pair)というイディオムを応用発展させたbo

    Boost.Rangeってなに - Qiita
  • std::unique_ptrをboost::optionalで改良する - Qiita

    std::unique_ptr、ちゃんと使っていますか? ただ必要に応じてdeleteするだけでなく、デリータを自作することでscoped guardを実現することもできる素晴らしいクラスですが、scoped guardの思想を体現するには惜しい部分があります。 それは管理する型pointerに対して必要以上の要求を課すこと、すなわちnullable pointerを要求することです。 これのせいで、何かリソースやハンドルなどポインタで定義されないものをstd::unique_ptrで管理することはできません。せっかくカスタマイズできるのに。 nullable pointerは以下を満たす必要があります。 ・EqualityComparable ・DefaultConstructible ・CopyConstructible ・CopyAssignable ・Destructible 加え

    std::unique_ptrをboost::optionalで改良する - Qiita
  • 一時オブジェクトの寿命と右辺値参照、ムーブセマンティクスのお話 - Qiita

    仰々しいタイトルですみません。 それぞれが絡み合ってるのであんまり綺麗にまとまっていませんが、一時オブジェクト、右辺値、左辺値、ムーブセマンティクスのお話をします。 4/11 ideoneへのURLをコード例の下に追記しました。 飛ぶと実際に実行した様子を見ることが出来ます。 一時オブジェクト ( = 右辺値 ) 一時オブジェクトは、右辺値と同等の意味合いで使われます。 すなわち、関数の戻り値、コンストラクタによって生成された直後のインスタンス、リテラルなどもここに入れることができるでしょう。 基的に一時オブジェクトはその式( expression )が評価された時点で破棄されます。 struct something { ~something() { std::cout << "destructor" << std::endl; } }; something func() { retur

    一時オブジェクトの寿命と右辺値参照、ムーブセマンティクスのお話 - Qiita
  • C++で様々なソートアルゴリズムを実装する - Qiita

    STLにはstd::sortというソートアルゴリズムが用意されています。これはランダムアクセスイテレータ2つを入力とし、破壊的な操作をする関数ですね。これと同じシグニチャで色々なソートアルゴリズムを実装してみたいと思います。wikipediaを参考にしています。詳しい説明はwikipediaをご覧ください。 学校の課題とかで丸写ししちゃだめだよ。 ちなみにSTLを全力で使います。C++らしさを出すために基的には添え字ではなくイテレータを操作するようにしています。 1/28/2016 追記; イテレータの情報をstd::iterator_traitsを使って取得するように記事を改めました。C++11までは推奨といったところですが、C++14からは必須だったと記憶しています。 また思いつきで書いていたコードを多少直しました。 iter_sorting_swap 最初に、あるヘルパ関数を紹介い

    C++で様々なソートアルゴリズムを実装する - Qiita
  • メンバ関数につけるconst修飾子、&(&&)修飾子の考察 - Qiita

    メンバ関数にconst修飾って何ぞやとという質問を受けました。メンバ変数を変更できないよって印…なのは分かっているのだそう。ここで、もう少しC++と仲良くなるために、もう少し深く彼らと付き合ってみたいと思います。オマケで、&(&&)修飾子についても考えます。 メンバ関数に付ける修飾子は、static, virtual, inline/constexpr, const/volatile, &/&&, noexcept/throw, override/final があります。このうち、今回取り扱うconst/volatile, &/&&は似た特性のものであるため、一緒に扱いたいと思います。 これら修飾子が実際に修飾するのは、メンバ関数に暗黙的に渡される第0引数とも言うべき、thisポインタです。 このthisポインタさえ解決してしまえば、メンバ関数も通常の関数と同じように扱うことができます。

    メンバ関数につけるconst修飾子、&(&&)修飾子の考察 - Qiita
  • 1