タグ

C++に関するkuenishiのブックマーク (235)

  • C++で例外を使ったプログラムをうまく書くにはどうすればいいのか(2) - 射撃しつつ前転 改

    こないだの記事はアクセス数の割に意外とたくさんコメントや反応を頂いたのだけれど、いろいろ考え始めると、なかなかコメントが返せなかった。 で、私はtry-catchを書くとそのブロックが呼び出される際に微妙にオーバーヘッドがかかるものだとばかり思っていたのだが、今日調べ直すと、実は、try-catchをいくら書こうが、最近のg++では、例外が実際に発生しない限りはオーバーヘッドは発生しないことがわかった。なんともひどい勘違いである。これが、みなさんのコメントと自分の中の意識とのズレを生んでいた原因のような気がする。 ノーコストでtryが使えるならば、前回の記事のparse_lineであれば、最内ループのところにtry_catchを書いてしまえばいい(それはそれで見た目的にあまりよろしくない様な気もするが、まぁそこら辺は表記の好みの問題であって、パフォーマンスの問題ではない)ので、葛藤する必要

    C++で例外を使ったプログラムをうまく書くにはどうすればいいのか(2) - 射撃しつつ前転 改
    kuenishi
    kuenishi 2010/08/31
    GCのない処理系で例外を使うのはプログラミング的に自殺行為だと思っていた
  • boost::serializationの使い方

    boost::serializationを使う はじめに コンパイル 簡単な使い方 クラスのバージョン付け 読み込みと書き込みで別の動作を行う 「非侵入型」のシリアル化関数 基底クラスをシリアル化する 配列をシリアライズする constメンバはどうするか ポインタからのシリアライズ:その1 ポインタからのシリアライズ:その2 基底クラスへのポインタから復元する 実装レベル オブジェクトの追跡 抽象クラスでのエラー NVP ロケールの設定 はじめに boost C++ Libraries(以下単にboost)という非常に便利なライブラリがあります。 次期C++標準にこのライブラリのうちのいくつかが採用されるらしいという話もあり、 C++開発者にとっては無視して通れないライブラリです。 そんなboostの中に、serializationというライブラリがあります。 一言で言ってしまえば、「クラ

    kuenishi
    kuenishi 2010/08/12
  • C++の話(本当にあった怖い話)

    constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ

    C++の話(本当にあった怖い話)
    kuenishi
    kuenishi 2010/07/22
  • 株式会社ロングゲート - 製品案内

    Information 2013/12/25 書籍『プログラミングの魔導書 Vol.3』の発売 (書籍版の予約受付は終了しました) 2013/12/03 書籍『プログラミングの魔導書 Vol.3』の予約受付開始 2011/12/01 ブログを開始 2011/11/30 著者からの指摘を受け、書籍 『プログラミングの魔導書 Vol.2』PDF版を改訂 2011/11/02 書籍 『プログラミングの魔導書 Vol.2』の壁紙公開 2011/10/05 書籍 『プログラミングの魔導書 Vol.2』を発売 (書籍版の予約受付は終了しました) 2011/9/15 書籍 『プログラミングの魔導書 Vol.2』の予約受付開始 技術トレーニングサービスを開始 2010/8/07 書籍 『プログラミングの魔導書 Vol.1』を販売開始 2010/6/01 書籍情報を公開しました 2010/2/28 今年5月

    kuenishi
    kuenishi 2010/07/20
    ほしい
  • 参照とポインタ

    この文章はプログラマでもプログラミング言語の専門家でもないただのプログラミング好きの私が適当に書きつづったものです。よってこの文章には正しい箇所もあるでしょうが、間違っている箇所もかなりあるはずです。ご指摘いただけたらと思います。また、この文章を読んでも内容を鵜呑みにしないでください。鵜呑みにした結果何か起きても知りません。 "諸悪の根元"-ポインタ Cの特徴の1つとして、また初心者が必ずつまずく(*)とされる難所としてポインタがあげられるわけだが、ポインタはどうも最新流行のプログラミング手法の中では諸悪の根元として忌み嫌われているようだ。 (*) 自慢するわけではないのだが、私は別にポインタでつまずいた記憶はない。もちろん、効果的な使い方などはその後いろいろなコードを読んでいく中で身に付いていったわけだが。 ポインタは確かに諸刃の剣である。非常に便利な反面、危険でもある。例えば次のような

    kuenishi
    kuenishi 2010/07/20
  • g++ でカバレッジを取得する - higepon blog

    最近 Erlang でコードを書くときにカバレッジをとっている。TDD で開発を進めていて make check するとテストが走る。テスト終了後にブラウザでカバレッジが表示されるようにしてある。カバレッジの重要性はCode Completeを読むとよく分かる。カバレッジをとると安心感が違う。書いたコードの不安な部分(不吉なにおいのする場所)を「テストが実際に実行しているか?」を確認できる。その確認により不安から解放され、目の前のコードに集中できるようになる。しかもカバレッジで判明する実行されていない部分にはたいていバグがある。 さて最近 Mona の安定性を上げるべく色々試しているのだが w3m で多くのサイトを訪れたり、Mosh の起動・終了を繰り返すとカーネル内の malloc が NULL を返す現象に悩まされている。最初はメモリリークしているだけだと思っていたがよく調べてみると、

    g++ でカバレッジを取得する - higepon blog
    kuenishi
    kuenishi 2010/07/02
    やばいなぁ、これいいなぁ。知らなかったぞ
  • sequenceを線形時間でfoldする - www.kotha.netの裏

    プリプロセッサメタプログラミングの話。 Cプリプロセッサ上で値の列を表現するためのデータ構造の一つとしてsequenceというのがある(Boost.Preprocessorの用語)。 他の言語でいうリストや配列に似たもので、以下のような形をとる。 (0)(1)(2)(3) /* 0から3までの整数のsequence */ (signed char)(short)(int)(long) /* C++の符号付き整数型のsequence */ なお、空のsequenceは扱いがいろいろ面倒なのでこの記事では無視する。 リスト風のデータ構造ならばもちろんfold演算が欲しい。Cプリプロセッサ上のプログラミングは関数型プログラミングであることを考えればなおさらだ。 このためにBoost.PPにはBOOST_PP_SEQ_FOLD_LEFTとBOOST_PP_SEQ_FOLD_RIGHTというマクロが

    sequenceを線形時間でfoldする - www.kotha.netの裏
    kuenishi
    kuenishi 2010/06/25
    すううげええええええ
  • C/C++ - 言語仕様編 第10回 〜テンプレート〜

    テンプレート関数 宣言 int f(int n); は、int 型変数 n を受け取り、int 型変数を返す。 C++ では、オーバーロードによって、この f(int n); 関数と、 double f(double v); C f(C c); などといった関数は区別されるが、もし、この3つの振る舞いが全く同じである場合、 すなわち、f(int n) や f(double n) で使用される演算子が、適切にオペレータ・オーバーロードされている 一般のクラス T に対しても動作させられるようにする場合、これを、 template<typename T> T f(T t); として代表させる事ができる。この f をテンプレート関数という。また、T をテンプレート引数という。 呼び出し テンプレート関数 f を使用する場合は、そのテンプレート引数 T に対して、型を指定し、 f<C>(t1);

    kuenishi
    kuenishi 2010/05/02
  • http://1978th.net/tech/promenade.cgi?id=76

  • OSDIR

    kuenishi
    kuenishi 2010/04/20
  • Introducing the MessagePack - Blog by Sadayuki Furuhashi

    高速なシリアライズライブラリ MessagePack の新しいWebサイトをオープンしました! The MessagePack Project Ruby Inside でも取り上げられたようです: MessagePack: Efficient, Cross Language Binary Object Serialization 昨今、効率を重視したシリアライズライブラリが数多く登場しています。特に、大量の処理を行う大規模な基盤システム向けに開発されていることが多いようです。 少し探してみるだけでも、次のような事例が見つかります: BERT(githubで採用:Introducing BERT and BERT-RPC) Thrift(Facebookが開発:Thrift: Scalable Cross-Language Services Implementation) Avro(Hado

    Introducing the MessagePack - Blog by Sadayuki Furuhashi
    kuenishi
    kuenishi 2010/03/24
    海外でも注目され始めたみたいだから、英語でドキュメンテーションするといいのかも。
  • C++0x基礎文法最速マスター - Faith and Brave - C++で遊ぼう

    C++0xになると、C++03でごちゃごちゃした部分がだいぶ すっきり書けるようになるので、C++0xでの入門はこんな感じになるよー、 という気持ちで書きました。 1. Hello World C++0xでの入出力には、IOStreamというものを使用します。 <<演算子でどんどんつないでいきます。 以下のプログラムの読み方は 「標準出力(cout)に"Hello World"という文字列と、改行(endl)を出力する」 です。 #include <iostream> int main() { std::cout << "Hello World" << std::endl; return 0; } Hello World coutとendlを使用するには、 #include <iostream> のように、という標準ライブラリのファイルを読み込む必要があります。 2. コメント 行コメント

    C++0x基礎文法最速マスター - Faith and Brave - C++で遊ぼう
    kuenishi
    kuenishi 2010/02/07
  • C++/Boost 基礎文法最速マスター - 野良C++erの雑記帳

    参考: http://d.hatena.ne.jp/faith_and_brave/20100201/1264997004 「C++0xになると、C++03 でごちゃごちゃした部分がだいぶすっきり書けるようになる」 らしいですが、C++0xを待たなくてもBoostを使えばだいぶすっきり書けるので、 BoostでのC++入門はこんな感じだよー、という気持ちで以下略。 この記事はC言語をある程度理解していることが前提です。 1. Hello World C++/Boostでの出力はC++標準の IOStream ライブラリと Boost.Format を組み合わせて行います。 例として、C言語のprintfを用いた Hello World を、C++/Boostを使って書き直してみます。 #include <stdio.h> int main() { printf( "%s\n", "Hell

    C++/Boost 基礎文法最速マスター - 野良C++erの雑記帳
    kuenishi
    kuenishi 2010/02/07
  • Re: AC_CHECK_LIB fails to locate a C++ library

  • はてなブログ | 無料ブログを作成しよう

    台北市立動物園と迪化街めぐり 子連れ台湾#5 年越し台湾旅行5日目、レジャーや友人との事を楽しむ日です。前日の様子はこちら www.oukakreuz.com 台北市立動物園へ パンダ館 パンダが見られるレストラン 迪化街へ 林茂森茶行でお茶を購入 小花園で刺繍グッズを購入 黒武士特色老火鍋で夕 台北市立動物園へ 松…

    はてなブログ | 無料ブログを作成しよう
    kuenishi
    kuenishi 2010/02/02
  • Programming: Principles and Practice Using C++ 序文 | taro-nishinoの日記 | スラド

    私がLinus氏のC++嫌いをこのところ取り上げているので、周辺には私がC++を嫌っているかのように思われてしまいました。しかし、何を隠そう、私はBjarne Stroustrup博士の大ファンであり、当のプロフェッショナルなプログラマはLisp系とC/C++をやっている(只単にやっているのみならず、セキュアで立派なプログラムを書けることを意味します)人達であると思っているくらいです。それ以外の言語は所詮オマケ的存在で、それぞれ用途に適した言語を使えばいいと思います。そのオマケ内でも私がPerlを好んでいるのは自由度が高く、汎用的であるからです。 ところで、Stroustrup博士の最新著"Programming: Principles and Practice Using C++"を読み終えたのですが、こののみならず博士の英文は非常に読み易いです。どこかのブログでラテン語を使い過ぎな

    kuenishi
    kuenishi 2010/01/18
  • C++ における const の重要性と活用 - ニートの世紀

    const なんて知らないよ、という層の人間が一定世の中には存在するようです。 そういった人間の大多数の主張は恐らく「面倒くさい」「嫌い」とかだと思うのですが、const 性に気を配るのは C++ においてはメンバ変数を private にしないといけないことと同程度にやらないといけないことです。という話をします。 const というとまず真っ先に出てくるのは「値が変わらないことでコードが読みやすくなる」とか「参照透明性のため」とかで、参照透明とか言葉がすごく綺麗ですごいって感じだと思います。ボクは参照透明という言葉がすごく好きです。 でも C++ は現実の言語なので現実を見ましょう。そんなのどうだっていいんです。 前提として C++ はそれなりに速い何かを作るための言語である、ソースコードはコメントや何らかの形のドキュメントに勝る、という二点をあげておきます。 例えば巨大なオブジェク

    kuenishi
    kuenishi 2010/01/15
  • A* - Cry's Blog

    http://okajima.air-nifty.com/b/2010/01/post-abc6.html 余計なことして遊んでたらマジで制限時間ギリギリの3時間かかってしまった...orz しかも色々はしょっているわ,出力に S, G が出てないわ... A* で discover されなかったノードに対する情報を出来る限りメモリに乗せないように (implicit graph っぽく) 作るにはどうするんでしょうねぇ,ということを試したかったので意味不明な書き方になってるんだけれど,まー,この入力で A* (@壁をぶち抜く heuristics) だと結局ノードを全部 discover しちゃってる (ホンマかそれ?) よね... 書いた結果の感想としては,こういう問題 (2次元の迷路) だと A* でやってもあんまり楽しくないので普通に BFS で距離埋めていけば良いのではないでしょ

    A* - Cry's Blog
    kuenishi
    kuenishi 2010/01/13
    どうでもいいけどテンプレート計算でできたりしないんだろか。
  • C++プログラマのレベル10

    レベル0 C++とかいう、Cにヘンテコな機能を付け加えた言語があることはしっているが、ワケ分からんので勉強する気にならない。 Cの何が不足なのか分からない。 C++についてググったり、入門書を読んだりしてみる。文法はCに後から無理やり付け加えた感じだ。 でも文法がわかりにくすぎる。 レベル2 vectorとか便利すぎて涙がでる。もういちいちrealloc()を呼び出さなくてもいいんだ。でもイテレーターとかいうのが、ワケ分からんので、ポインタを使っている。 構造体の中に関数を書けるのは便利かもしれない。すくなくとも、わざわざ構造体のポインタを引数に渡さなくてもいいわけだ。 レベル3 テンプレートが分からなくて挫折中。テンプレートがわかれば、STLがもっと分かるようになる気がする。でも、いい参考書が見つからない。 継承とか仮想関数も便利だと気がつく。namespaceも地味に便利だ。 レベル4

    kuenishi
    kuenishi 2009/12/31
  • MessagePack-RPC for C++ テクニカルプレビュー - Blog by Sadayuki Furuhashi

    バイナリシリアライズ形式 MessagePack をプロトコルに利用したRPCライブラリ MessagePack-RPC の、C++版を開発しています。 以前に MessagePack-RPC for Ruby について 54行で実装する分散KVSや140行で作る分散リアルタイム検索エンジンを紹介しましたが、そのC++版です。 大まかな設計はRuby版と同じで、Ruby版と同じような使い勝手で利用できます。 しかしRuby版とは異なり、C++版では完全にマルチスレッドに対応しています。具体的には、マルチコア時代の高並列性IOアーキテクチャ Wavy を利用しています: 複数のスレッドでイベントループを共有しており、マルチスレッドでイベントハンドラを次々に処理していきます。 単純なイベント駆動I/Oと比べると、並列性が高いという利点があります。イベントハンドラの中で処理が多少ブロックしても、

    MessagePack-RPC for C++ テクニカルプレビュー - Blog by Sadayuki Furuhashi
    kuenishi
    kuenishi 2009/12/23