タグ

c++に関するamachangのブックマーク (69)

  • 和訳:Rvalue References: C++0x Features in VC10, Part 2 - ntnekの日記

    Stephan T. Lavavej のRvalue References: C++0x Features in VC10, Part 2の適当な訳です。左辺値と右辺値、無駄なテンポラリが生成される問題、新たな参照「右辺値参照」の特徴と使い方、ムーブセマンティクスの意味と使い方、完全転送パターンの書き方、それらを可能にする仕組みと、これに関する C++0x の新たな文法ルールについて書かれています。 特に前半は、この手の記事としてはこれまでで一番分かりやすく丁寧に解説されていると思います。正直よく分かっていなかったんですけど、これを読んでだいぶスッキリしました。 で、ムーブセマンティクスによるテンポラリの除去が日用品のように使えるようになれば、LinusLinux カーネル開発者たちが「C++なんてクソ言語は使えねぇ!」と主張する(正当な)理由の一つを崩すことができますね。これを機会

    和訳:Rvalue References: C++0x Features in VC10, Part 2 - ntnekの日記
    amachang
    amachang 2009/07/16
    右辺値、左辺値、非 const、const、左辺値参照、右辺値参照。すごく勉強になった。/参照の折りたたみ、左辺値参照は感染する/テンプレート引数の推論、パラメータの参照削除、左辺値引数の左辺値参照化
  • Concurrency Modifications to Basic String

    ISO/IEC JTC1 SC22 WG21 N2668 = 08-0178 - 2008-06-12 Alisdair Meredith, alisdair.meredith@codegear.com Hans Boehm, Hans.Boehm@hp.com Lawrence Crowl, Lawrence@Crowl.org, crowl@google.com Peter Dimov, pdimov@pdimov.com Daniel Krügler, daniel.kruegler@googlemail.com This paper is a modification of N2647 = 08-0157 - 2008-05-16. It reflects the changes directed by the concurrency/library subgroup. Adopt

    amachang
    amachang 2009/07/16
    std::string と同時実行性。/ iterator と operator[] はスレッドセーフにしよう。 copy-on-write はやめよう。
  • Kazuho@Cybozu Labs: C++ で自動型変換

    « なんとなくリフレクション in C++ | メイン | Pathtraq の API を公開しました » 2008年06月27日 C++ で自動型変換 C++ の拡張ライブラリである boost には、lexical_cast というライブラリがあって、iostream への入出力ができる型ならなんでも文字列化 (その逆も) できるので、とても便利です。でも、lexical_cast は、int → long のような変換の場合にも iostream を使った変換をしてしまうので、汎用のリフレクションコードを書こうとすると、そのままでは使いにくいです (オーバーヘッドが大きすぎる)。というわけで、変換前後の型に応じて、static_cast と lexical_cast を自動的に切り替えるようなキャスト関数を作ってみました。こんな感じで使います。 // calls lexical_c

    amachang
    amachang 2009/07/07
    if is_convertible then static_cast else lexical_cast /おおお。なるほどおおお
  • 俺コーディング規則 - Cube Lilac

    最近,他人が自分のコードを読んだり修正したりする機会が増えてきたので,意思疎通のために自分のコーディング規則をメモしておきます.CLX C++ Libraries も(たまにブレてますが)ここに挙げる規則に従って書いているので,コードを読む際の参考にでも. 尚,以下は基的に自分が守っているだけで,他人は(単一プロジェクト内のコード間で整合性が取れる範囲で)自分の信念に基づいてコーディングしていけば良いんじゃないかな,と思っています. 名前空間 グローバル名前空間には,クラス/関数を(極力)定義しないようにします.通常は,プロジェクト毎に適当な名前空間を考えて,その名前空間内に各種クラス/関数を定義します.ただし,ユーザに使用されることを意図していないクラス/関数に関しては,使用する名前空間の中でさらに detail 名前空間を定義して,その中で定義します. クラス設計 クラスは, x.i

    俺コーディング規則 - Cube Lilac
    amachang
    amachang 2009/06/30
    コーディングルール。参考に
  • Boost.Randomで簡単な確率 - Faith and Brave - C++で遊ぼう

    たまに欲しくなるのでメモ。 #include <iostream> #include <ctime> #include <boost/array.hpp> #include <boost/random.hpp> using namespace boost; int main() { // 80%の確率で0, 20%の確率で1 array<int, 10> probability = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1}; mt19937 gen(static_cast<unsigned long>(std::time(0))); uniform_int<> dst(0, probability.size() - 1); variate_generator<mt19937, uniform_int<> > rand(gen, dst); for (int i = 0;

    Boost.Randomで簡単な確率 - Faith and Brave - C++で遊ぼう
    amachang
    amachang 2009/06/29
    boost::variate_generator /アルゴリズムと分布を指定して乱数を生成。
  • Kazuho@Cybozu Labs: スレッド間で共有する変数のアクセス権制御を C++ コンパイラで強制する方法

    マルチスレッドなプログラムを書いていると、スレッド間で共有する変数へのアクセスを正しく直列化できているか、という点が常に問題になります。どうせなら、正しく書けているかコンパイル時に確認したいよね、ということで、以下のような C++ テンプレートを書いてみました。 template <typename T> class cac_mutex_t { public: class lockref { protected: cac_mutex_t<T>* m_; public: lockref(cac_mutex_t<T>& m) : m_(&m) { pthread_mutex_lock(&m_->mutex_); } ~lockref() { pthread_mutex_unlock(&m_->mutex_); } T& operator*() { return m_->t_; } T* ope

    amachang
    amachang 2009/06/24
    lockref のスコープでロックをかけて lockref からしかオブジェクトを参照しなくすることで、変数へのアクセスを直列化する。// scoped_lock と scoped_ptr の合わせ技
  • C++についてのちょっとしたアンケートです。

    C++についてのちょっとしたアンケートです。

    amachang
    amachang 2009/05/25
    結果待ち
  • g++ がコンストラクタ二つ作る件 - 兼雑記

    高林さんのとこでチラっと出ていたコンストラクタの実体が二つある件について。 http://namazu.org/~satoru/blog/archives/000061.html コンストラクタ Tax::Tax() が 2つあるのは、片方はオブジェクトの作成用、もう片方は継承されたとき用のようです。 ここに理由が書いてあります!(たぶん) http://www.codesourcery.com/cxx-abi/abi.html#vtable-ctor 読んでもイマイチわからんというか面倒そうなので正直読んでません、が、なんとなく理由はわかった気がしました。 例えばこんなコード。 struct A { A(); }; struct B : public A { B(); }; struct C : public B { C(); }; 逆アセしてやると、 C::C() では B::B()

    g++ がコンストラクタ二つ作る件 - 兼雑記
    amachang
    amachang 2009/05/14
    仮想継承(virtual 継承)した親クラスを特別扱いするために、コンストラクタが2つ出来る。
  • iostream の状態について - IT戦記

    書いとかないと忘れそうなのでメモ gcc の basic_ios は以下のような operator void* と operator! を持っているので //@{ /** * @brief The quick-and-easy status check. * * This allows you to write constructs such as * "if (!a_stream) ..." and "while (a_stream) ..." */ operator void*() const { return this->fail() ? 0 : const_cast<basic_ios*>(this); } bool operator!() const { return this->fail(); } //@} 以下のように if (in.read(buf, size)) // o

    iostream の状態について - IT戦記
  • C++0x explicit bool - Faith and Brave - C++で遊ぼう

    スマートポインタのようなクラスを作成する場合、if文でヌルポインタかどうか判定できるようにするために operator boolをオーバーロードします。 template <class T> class smart_ptr { T* p_; public: operator bool() const { return p_ != 0; } }; smart_ptr<int> p; // OK if (p) { // ポインタは有効 } else { // ポインタは無効 } しかし、この方法では以下のような意味のないコードもコンパイルが通ってしまいます。 float f = p; int x = p + 1; cout << p << endl; C++03には、この問題を解決するために"conversion to unspecified bool"というイディオムがあります。 これを使用

    C++0x explicit bool - Faith and Brave - C++で遊ぼう
    amachang
    amachang 2009/04/30
    メンバポインタ→boolの暗黙変換はできるが、メンバポインタ→整数の暗黙変換はできない。この性質を生かして bool にだけ暗黙変換可能なクラスを生成するイディオム。/それを要らなくするための "explicit conversion"
  • 可変引数テンプレートでの型リストまとめ - Faith and Brave - C++で遊ぼう

    C++0xでは、可変引数テンプレートという機能が追加されます。 これを使うと、テンプレートパラメータを可変個受け取ることができ、 template <class... Args> // ...と書くと可変引数テンプレートになる class tuple; 可変引数テンプレートは型のリストと見なすことができます。 tuple<int> t1; // 要素1つ(int)の型リスト tuple<int, char> t2; // 要素2つ(int, char)の型リスト tuple<int, char, long> t3; // 要素3つ(int, char, long)の型リスト ということで、型リストがどこまでできるか試すために リスト処理を作ってみました。 headとtail - 先頭と後部 length - 長さ at - I番目の型を取得 concat - 型リストの連結 cons -

    可変引数テンプレートでの型リストまとめ - Faith and Brave - C++で遊ぼう
    amachang
    amachang 2009/04/20
    型リストの操作、いろいろ
  • http://ml.tietew.jp/cppll/cppll/thread_articles/13369

    amachang
    amachang 2009/04/20
    readsome と read の違い。 readsome はブロックして待つことをしない。 in.rdbuf()->in_avail() の分だけ読み込む
  • C++の次期仕様「C++0x」のポイント ~Bjarne Stroustrup氏との対話~

    はじめに ソフトウェア業界には現役開発者の立場を保持しながら、ソフトウェアハウスを経営するオーナー社長がいます。彼らは最新の技術動向を観察しながら、組織を引っ張ります。数10年に及ぶ豊富な開発経験と圧倒的な技術力を誇り、組織内ではカリスマ化している人さえいます。開発者と経営者の2足の草鞋を履きこなすのは簡単なことではないでしょう。彼らは相当のプレッシャーを感じながら日々生きているはずです。 連載で取り上げているBjarne Stroustrup氏は、C++を設計しただけではなく、国際標準化委員会活動の先頭に立っています。同氏もプレッシャーの中で生きている一人のはずです。 今回の質問意図 Stroustrup氏はC++発展の歴史を振り返りながら、“C++の設計作業は所属組織の支援を受けることなく、自分独りで始めたものである”と述懐しています(関連情報:豊田孝の「IT談話館」)。辛い孤独な作

    C++の次期仕様「C++0x」のポイント ~Bjarne Stroustrup氏との対話~
    amachang
    amachang 2008/11/20
    Stroustrup 氏との対談。
  • Apache C++ Standard Library User's Guide

    amachang
    amachang 2008/11/19
    C++ 標準ライブラリの詳細な解説。「どう便利か、どう使うべきか」についても書かれてて便利。ページ数は膨大
  • ウノウラボ Unoh Labs: diff with C++

    ミートソーススパゲティを作るときは、ミートソースから作るのが信条のbokkoです。それはさておき、今日はdiffのお話です。 diff diffは指定した2つのファイルの差分を求めるコマンド、もしくはその差分そのものを指します。普段から何気なく使用しているコマンドですが、その中で使われているアルゴリズムは結構難しいです。 差分を計算するということ 差分を計算するというのは以下の3つを求めることに帰結します。 ・Levenshtein Distance(Edit Distance) ・LCS(Longest Common Subsequence) ・SES(Shortest Edit Script) 上から順に1つずつ説明していきます。 Levenshtein Distance Levenshtein Distanceは2つのシーケンスの違いを数値化したもので編集距離とも言います。これは後述

    amachang
    amachang 2008/11/14
    ミートソーススパゲティを作るときは、ミートソースから作る/diff は C++ で作る/追加回数+削除回数=編集距離/シーケンス間の最短経路/LCSで分割して左右のシーケンスをまたLCSで分割/ hpp だけで使いやすい。
  • C++0x 「N1385 転送問題:引数」の日本語訳 - Faith and Brave - C++で遊ぼう

    公開します。 翻訳がおかしいところがあったら教えてください。 N1385 The Forwarding Problem - Arguments.pdf 原文はこれです。

    C++0x 「N1385 転送問題:引数」の日本語訳 - Faith and Brave - C++で遊ぼう
    amachang
    amachang 2008/11/13
    C++0x で導入される右辺値参照の使いどころ。C++ の問題点としてもおもしろい。/ template<class A> void f(A& a) {} を f(1) で呼び出せないというところから、試行錯誤。すごい
  • C++11 - Wikipedia

    この記事は更新が必要とされています。 この記事には古い情報が掲載されています。編集の際に新しい情報を記事に反映させてください。反映後、このタグは除去してください。(2019年1月) C++11は、プログラミング言語 C++ のISO標準 ISO/IEC 14882:2011 の略称である。規格の策定中は2009年中の標準化を目指していたため、C++0x という仮称で呼ばれていた。 ISO/IEC 14882:2003 (C++03) に代わるものとして、2011年8月12日にISOによって承認された[4]。後継のC++14が2014年8月18日に承認されている。 コア言語への機能追加や標準C++ライブラリの拡張を施し、C++TR1ライブラリの大部分を(数学的特殊関数ライブラリを除いて)取り込んでいる。 標準策定の方針[編集] C++ への修正はコア言語と標準ライブラリの双方に及ぶ。 委員会

    amachang
    amachang 2008/11/12
    次期 C++ の標準 C++0x のまとめ。すごい充実。コード多数。/「型推論」「可変テンプレート引数」この二つでコードを書く量がかなり減りそう/ See Also: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/
  • Changeset 44358 – Boost C++ Libraries

    amachang
    amachang 2008/11/11
    boost spirit2 全体像。 lexer parser など細かくディレクトリ分けされている。今度使ってみよう
  • Changeset 37902 – WebKit

    amachang
    amachang 2008/10/28
    WebKit が Mozilla の独自拡張の、ドラッグアンドドロップのときのアイコンや、虫眼鏡アイコンに対応。
  • Changeset 37715 – WebKit

    amachang
    amachang 2008/10/21
    WebKit による WebWorker の実験的な実装。 JavaScript がどのようにマルチスレッドになっていくのか興味がある