タグ

C++に関するohnishiakiraのブックマーク (81)

  • https://edunlp.hatenadiary.com/entry/20110702/1309621088

  • C++の文法が複雑過ぎると話題に(俺の中で) | TRIVIAL TECHNOLOGIES 4 @ats のイクメン日記

    みんなのIoT/みんなのPythonの著者。二子玉近く160平米の庭付き一戸建てに嫁/息子/娘/わんこと暮らしてます。月間1000万PV/150万UUのWebサービス運営中。 免責事項 プライバシーポリシー C++の言語仕様を個別に関連づけながら図にしたのを見つけたんだけど,これがすごい。George Mason大学のSeal Lukeさんいわく「正しくかつ完璧なC++パーサーを作るのは数学的に不可能」なのだそうで,さもありなんと頷ける。 余りに巨大なので縮小してる。クリックで元画像を開きます。 同じようにして作ったC言語の文法図はこんなかんじ。 C++を華麗に使いこなせるのは,Googlerみたいに頭のよい人だけなのかも...。

  • UNIX上でのC++ソフトウェア設計の定石 (3) - memologue

    鉄則3: マルチスレッドのプログラムでのforkはやめよう マルチスレッドのプログラムで、「自スレッド以外のスレッドが存在している状態」でfork*1を行うと、さまざまな問題を引き起こす可能性があります。「問題」の典型例としては、子プロセスのデッドロックが挙げられます。問題の詳細を把握しないまま、マルチスレッドのプログラムで不用意にforkするのはやめましょう! 何が起きるか 実例から見てみましょう。次のコードを実行すると、子プロセスは実行開始直後のdoit() 呼び出し時、高い確率でデッドロックします。 void* doit(void*) { static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_lock(&mutex); struct timespec ts = {10, 0}; nanoslee

    UNIX上でのC++ソフトウェア設計の定石 (3) - memologue
  • trickpalace.net - このウェブサイトは販売用です! - trickpalace リソースおよび情報

    This webpage was generated by the domain owner using Sedo Domain Parking. Disclaimer: Sedo maintains no relationship with third party advertisers. Reference to any specific service or trade mark is not controlled by Sedo nor does it constitute or imply its association, endorsement or recommendation.

  • C++er 達の post を集めてみました。 - 偏見プログラマの語り!

    僕の TL には C++er がたくさんいます。僕は脳ミソ沸いてるのでこんな感じですが。 @PG_kura C++ はぁはぁ C++ はぁはぁ C++ はぁはぁ C++ はぁはぁ C++ はぁはぁ C++ はぁはぁ C++ はぁはぁ C++ はぁはぁ C++ はぁはぁ C++ はぁはぁ C++ はぁはぁ C++ はぁはぁ C++ はぁはぁ C++ はぁはぁ C++ はぁはぁ C++.. 2010-09-03 18:40:09 via ラーメン大陸 とかく、Twitter にはすごい人がたくさん居るので興味ある人はフォローしてみると良いと思います。*1 *2 @nagoya313 僕はC++を得たが代わりに青春を失ったことに気づいた。 2010-07-13 00:30:23 via web @fetus_hina 「// このコードが直感に反して正しく動く事に関して、私は真に驚くべき理由を見

  • Big Sky :: C++でcoutやcerrの挙動を変える。

    先日twitterで「C++でデバッグする時、よくやるよね」って言ったら結構知らない人がいたのでここでも紹介してみる。 既存のコードでcout/cerrを使ったデバッグ文がわんさかあって、これログファイルとして出力したいな...って場合ありますよね。 そんな場合 #include <iostream> #include <fstream> using namespace std; int main() { // こんなの ofstream ofs("debug.log"); cout.rdbuf(ofs.rdbuf()); // いれとく cout << "debug string" << endl; } こうしておくと、その後のcoutへの出力が全てdebug.logというファイルへ出力される。 なおrdbufを元に戻すには #include <iostream> #include <f

    Big Sky :: C++でcoutやcerrの挙動を変える。
  • コンストラクタ,デストラクタでの例外処理 - Cube Lilac

    この記事は,C++プログラマであるかを見分ける10の質問 - Life like a clown の「コンストラクタ,デストラクタにおける例外処理についての戦略を述べよ」に対する回答的な記事になります.例外処理は通常においてもなかなか難しい処理の一つですが,コンストラクタ,デストラクタにおける例外処理をどうするかは,さらに頭を悩ませる問題となります. コンストラクタ コンストラクタにおいて例外を発生させる場合にはデストラクタが実行されないため,気をつける事は「(デストラクタで行われるはずであった)各種リソースの開放を例外を送出する前にきちんとを行う」になります.コンストラクタで例外を発生させるべきではない派の主張の論拠も大体ここに起因するようです. 比較的有名なサイトで「コンストラクタからの例外送出」が「禁じ手」として紹介されていることもあり、また、最近ではその内容を再編集した書籍が出版さ

    コンストラクタ,デストラクタでの例外処理 - Cube Lilac
  • Big Sky :: 何も見ずにC++でjsonパーサが書けるか試してみた。

    以前、kazuhoさんが書いたpicojsonの紹介をさせて頂いたのですが、あれから何度も使わせて頂いていてkazuhoさんのいる方角には足を向けて寝られないmattnです。 Big Sky :: ヘッダファイルだけでC++から使えるJSONパーサ「picojson」が凄い! kazuhoさんがやってくれました。ずいぶん前からjsonをC++でパース(SAXじゃなくてDOM)するのに小さいライブラリないかなーと思ってました。個人的にはjson-cというのを使ってたのですが... http://mattn.kaoriya.net/software/lang/c/20090702153947.htm なんど見ても綺麗なコードです。 で、先日ちょっと出張があって新幹線に乗る事があり、ちょっとルールを決めて僕にも同じ物が書けるか試してみました。 以下ルール。 picojson相当のjsonパーサを

    Big Sky :: 何も見ずにC++でjsonパーサが書けるか試してみた。
  • C++でboolの演算 - Dive to the Software

    パッと見で全然分からなかったバグコード if(!this-IsComplete()) { return true; } 想定の逆が返ってくるからなんだろうとよくみると、「this->」のつもりが「this-」になってた。 コンパイル通るもんだねぇ。 「!this - IsComplete()」つまり、thisアドレスに対して!した結果引くIsCompleteの結果ということ。 !thisは常にfalseになるので「false - (true or false)」という演算になっていた模様。 気になったからVS2008でbool同士の演算をやってみた 演算子 結果 true + true true true + false true false + true true false + false false true - true false true - false true false

    C++でboolの演算 - Dive to the Software
  • 本の虫: 確率分布の使い方

    C++0xのstd::randomには、様々な分布クラスが存在する。一体どうやって使い分ければいいのか。ここでは、ゲームにたとえて考えてみる。 もっとも簡単な分布は、一様分布(Uniform distributions)である。これは、a ≦ i ≦ b, の範囲の値iを、それぞれ等しい確率で返す分布である。 ゲームでいえば、サイコロやルーレットなどの実装に使えるだろう。 // 六面サイコロの実装 int main() { std::mt19937 rng ; // 一様分布 // 0から5までの数字を等しい確率で返す分布 std::uniform_int_distribution<> dice(0, 5) ; int a[6] = { } ; // 六面サイコロの出た目の回数を記録する配列 // 600回サイコロを振る for ( int i = 0 ; i != 600 ; ++i )

  • C++プログラマであるかを見分ける10の質問 - Cube Lilac

    「優れたPerlプログラマを見分ける27の質問」の日語訳 - Islands in the byte stream, Javaプログラマであるかを見分ける10の質問 - やさしいデスマーチ を見ながら C++ だとこれくらいかなぁと取りあえず作ってみました.前半は単純な機能の説明,後半は実際にどのように使って(使い分けて)いくかについての質問になっています.選択基準としては,特に後半部分は,自分が観測できている C++ 界隈で論争になったトピックを中心に取り上げています. iterator の役割について説明せよ. *_cast およびCスタイルのキャストそれぞれについて概要を説明せよ. overload と override と hiding の違いについて説明せよ. const の機能について概要を説明せよ. 多重継承について概要を説明せよ. ポインタの使用方法について,メモリーリー

    C++プログラマであるかを見分ける10の質問 - Cube Lilac
  • C++コミュニティーの中心でC++をDISる

    Boost.勉強会4にて発表した内容です。http://atnd.org/events/11551Read less

    C++コミュニティーの中心でC++をDISる
  • 本の虫: ADLへの対処方法

    C++のADLは、時として、意図しない結果を引き起こす。 // フサフサである自分の書いたコード // 独自のコンテナを実装している。 // 表示用のprint()関数は、用意していない。 namespace FusaFusa { template < typename T > class Container {} ; } // 同僚のハゲの書いたコード // コンテナに格納する要素クラスを実装している。 namespace Hage { template < typename T > class Element ; // Elementを表示するための、ジェネリックな関数。 // Fooを引数に取ることを意図していない。 template < typename T > void print(T) {} } // オブジェクトを印刷するための関数。 template < typename

  • C++0x 標準ライブラリ完全解説 まとめ - 野良C++erの雑記帳

    No.00 Introduction (2011-01-07 更新) No.01 namespace rel_ops, utility (2011-01-07 更新) No.02 std::move, utiliy (2011-01-16 更新) No.03 std::move_if_noexcept, utiliy (2011-01-17 更新) No.04 std::swap, utiliy (次回予定)

    C++0x 標準ライブラリ完全解説 まとめ - 野良C++erの雑記帳
  • C++0x Memory Model 第1回 - 1.9 Program execution - Cry’s Diary

    前回の記事:C++0x Memory Model 第0回 - メモリモデルとは何か 以下では, C++0x プログラミング言語の標準規格として一貫して N3225 を参照しています.文中で (1.9/12) などという表現が出てきた場合は N3225 における条項を指しています. 太字かつ斜字体の言葉 は N3225 で C++0x で定義される用語, 太字の言葉 はブログエントリ中で特別な意味を持たせた用語として定義しているものです. 第1回目のこの記事では,まず,ただ1つの 実行スレッド thread of execution だけを考慮した場合のメモリモデルに関わる基的な事項を説明していきます.複数スレッドが存在する状況下でのメモリモデルに関する説明する上で,単一の実行スレッド内に限定した場合の状況を把握しておくことは必要不可欠なのです. 第0回において,プログラム中にただ1つの

    C++0x Memory Model 第1回 - 1.9 Program execution - Cry’s Diary
  • 本の虫: C++0xによるコンパイル時の配列生成

    Don't do this at home. I am professional. 絶対にマネをしてはいけません。 コンパイルタイムプログラミング - 主題のない日記 昨晩、これと同じことがC++で出来るかどうか質問を受けた。5という数字が与えられたときに、0,1,2,2,3,3,3,4,4,4,4,5,5,5,5,5という数列をコンパイル時に生成できるかという問題である。 その時は、プリプロセッサー以外に、どうにもうまい実装方法が思いつかなかった。問題は、再帰を止める方法だ。しかし、今朝、改めて問題を考えると、頑張ればなんとかなるのではないかとも思った。 まず、プリプロセッサーによる実装を考えよう。これは、BOOST.Preprocessorを使えば、簡単に実装できる。簡単というのは、C++のプロにとって簡単という意味である。言うまでもなく、プリプロセッサーは邪道であり、中でもBoost

  • Boost 多次元配列ライブラリ (Boost.MultiArray)

    Boost 多次元配列ライブラリ (Boost.MultiArray) Synopsis - 概要 Boost 多次元配列ライブラリは,多次元コンテナと, 意味的に等価な連続データの配列へのアダプタを提供する。 このライブラリのクラス群は,できるだけ STL コンテナと近い振る舞いをし, また N 次元配列の慣用句 (formulation) である, いわゆる "ベクタのベクタ" より便利でかつ有効な実装を提供する。 配列はひとたび構築されるとリサイズできないが, 保持するデータへの代替ビューを提供することによって, スライス (sliced) されまた形作られ (shaped) 得る。 Table of Contents - 目次 Rationale Related Work Short Example MultiArray Components Construction and As

  • LDAのコードをC++で書いてみた - 旅日記

    前回の記事で思ったより勉強になったので、調子に乗って再び id:tsubosaka さんのJavaで書かれたLDAの実装をC++で書いてみました。ベースとなる手法は同じく collapsed gibbs sampling(Griffiths and Steyvers, PNAS, 2004) です。動作確認は g++ 4.3.3 (Ubuntu 9.04) で行っています。ソースコードは前回のARROWよりかなり長くなってしまいました。今度から長い場合は github あたりにアップするかもしれません。 2010.01.08追記: pcomp.h のソースが抜けていたので追加しました。 2010.01.09追記: メモリのバグを修正しました。 インストール g++ -Wall -O2 -c lda.cc g++ -Wall -O2 -c main.cc g++ -Wall -O2 -o l

    LDAのコードをC++で書いてみた - 旅日記
  • ポインタは用法用量を守って正しくお使いください - kikairoya’s diary

  • 使いもしないのにC++のtemplateを毛嫌いする全ての人に - 神様なんて信じない僕らのために

    C++AdventCalendarの記事です。 さて、 生配列使ってますか? tr1::array(boost::array) 使ってますか? 生配列使っていると答えた貴方、 →まず死ね。 はい、arrayが常識ですよね。 さて、とはいえ、 「テンプレートを使うと遅いしコードがでかいし」 「生配列が一番速いしコードが小さいし」 「なのでテンプレート禁止」 なんて話を聞くこともあるかと思いますが、 こういう事をいう人は大抵「テンプレートを書いたことがない」のに言ってます。 なぜか? こういう人が当に心配しているのは「テンプレートが肥大化すること」じゃないのです。 「テンプレートが書けないし読めないのを認めたくないからです」 多くはCの老害だからですが、そういう人は放っておいてC++な人はきちんとテンプレートを使いましょう。 だって多くのテンプレートのコードは大きくもなければ非効率でもないか

    使いもしないのにC++のtemplateを毛嫌いする全ての人に - 神様なんて信じない僕らのために