Learn up-to-date, idiomatic C++ with code examples, concise explanations, cheat sheets and infographics. -- Lerne aktuelles, idiomatisches C++ mit Code-Beispielen, knappen Erklärungen und Infografiken. -- 学现代的C++ // 代码示例,简洁的说明和图表
![Learn Contemporary C++ | Concise&Visual Examples](https://cdn-ak-scissors.b.st-hatena.com/image/square/f90a50f7746c6201ef7c3412a36b46d1788f9032/height=288;version=1;width=512/https%3A%2F%2Fhackingcpp.com%2Findex_card.png)
この記事はC++ Advent Calendar 2014の21日目にエントリしています。 内容はC++メモリモデルと逐次一貫性についての概説記事となっています。 flickr / nomadic_lass もくじ 忙しい人のための「C++メモリモデル」 C++メモリモデル一問一答 ソフトウェアからみた「C++メモリモデル」 “メモリ”という共有リソース C++ソースコードが実行されるまで メモリの一貫性と整合性 逐次一貫性モデル is Easy ハードウェアからみた「C++メモリモデル」 ハードウェア・メモリ一貫性モデル C++コンパイラの責任と自由 強いメモリモデル vs. 弱いメモリモデル 逐次一貫性モデル is Hard (本文のみ約9600字) まえがき When your hammer is C++, everything begins to look like a thumb
ループカウンタを64bitにしたり、 バッファのサイズを定数にしたらパフォーマンス激落ちなんだけど何で? c++ - Replacing 32bit loop count variable with 64bit introduces crazy performance deviations - Stack Overflow stackoverflowで、興味深い質問が行われている。 簡単にまとめるとこうだ。std::uint64_t型の配列の各要素にx86-64のpopcnt(1になっているビット数を数える命令)を適用したい。 コードの肝心の部分を書くと、以下のようになる。 for (unsigned i=0;i<size/8;i+=4) { count+=_mm_popcnt_u64(buffer[i]); count+=_mm_popcnt_u64(buffer[i+1]); coun
整数除算のエラーとしては 0 による除算が有名ですが,オーバーフローも致命的なエラーになるなりえるという話です. (追記 2014-02-27) そもそも整数の演算におけるオーバーフロー時の動作は未定義なのですが,加算,減算,乗算のオーバーフローについては,オーバーフローした分が捨てられるという前提で使っていることがよくあります.本当はやっちゃ駄目なのでしょうが…. INT32-C. 符号付き整数演算がオーバーフローを引き起こさないことを保証する http://www.jpcert.or.jp/sc-rules/c-int32-c.html 具体的には,符号付き 32-bit 整数の除算で INT32_MIN / -1 となったとき,およびに符号付き 64-bit 整数の除算で INT64_MIN / -1 となったときにオーバーフローが起きます(※1). 8-bit や 16-bit の
はじめに KMC 2回生のhatsusatoです。コミケまでもう1週間もないんですね1。27日まで授業があるとか正気の沙汰じゃない。 この記事は KMC アドベントカレンダー 2013 の 23 日目の記事です。昨日の記事は DtYaZsK 君の C++11超入門 でした。 今日は昨日に引き続いてC++11に関するお話です。 C++11で覚醒した共用体の話 共用体はたいていのC言語の入門書に載っている(と思う)ので、C言語をひと通り勉強した人なら共用体を知っていると思います。共用体はC言語の持つ低レベルなメモリ操作能力の一翼を担っています。しかし、共用体を実際に利用することは非常に稀でしょう。 実はこの共用体が、C++11での仕様変更によって生まれ変わりました。今回はそんな共用体にスポットライトを当ててみます。 共用体の基本 まず、C++11で共用体がどうなったのかを見る前に、これまでの共
子供のころからできるだけ手抜きして成果を挙げることだけは長けている山本です。 今回は、C/C++ で作ったプログラムが運用中にクラッシュするときのデバッグ方法のお話しです。 開発中のデバッグは gdb などでソース追いながらデバッグできますが、運用中ですと strip していたり最適化していたりしてデバッグが難しくなります。 そもそも、いきなりクラッシュすると情報が残らずに困ってしまいます。そんなときどうするか。 Step1. スタックトレースを出力する こんな関数を用意しましょう。Linux 以外の人はそれなりに実装してください。 #include <execinfo.h> #include <unistd.h> void dump_stack() { void* bt[100]; int n = backtrace(bt, 100); backtrace_symbols_fd(bt,
C++14 の Committee Draft が公開された. C++14 は基本的には C++11 のマイナーバージョンアップであるが,バグフィックスのみを行っている訳ではなく, C++11 の時点で微妙に使いにくかった機能,特にラムダ式については,大きな機能追加が行われている. そこで,本 blog では,このエントリから数回に分けて, C++14 のラムダ式について説明してみることにする. 拙い文章になるかとは思うが,読者の理解の助けになれば幸いである. なお,これらの記事を書くにあたって,読者に対して C++11 のラムダ式に対する知識を要求しないように心がけたが, もしかしたら,説明不十分であり,分かりにくい部分があるかもしれない. そのような場合には, 本の虫: lambda 完全解説 等, C++11 のラムダについて書かれた記事は多いので, それらの記事を読んでみることを
こんにちは、株式会社CFlatです。 あれほど何でも取り込むC++がC++11になってもいまだに採用しない言語仕様で、他の言語にはよく採用されているもの。 幾つかありますが、代表的なものがGC(ガベージコレクション)とfinallyブロックでしょう。 ただ今回は、GCについてはTechnical Reportに既に出ているようですし、Boehm GCというライブラリ(c.f. http://homepage2.nifty.com/aito/gc/gc.html)もありますので割愛します。ちょっとfinallyについて見ていきましょう。 finally文の使い方 finally文は、例えば以下のように使われます。 try { std::cout << "例外を投げるかもしれない処理" << std::endl ; return ; } catch (...) { std::cout << "
2013年5月18日紙版発売 2013年5月18日電子版発売 高橋晶,安藤敏彦,一戸優介,楠田真矢,道化師,湯朝剛介 著 四六判/528ページ 定価3,168円(本体2,880円+税10%) ISBN 978-4-7741-5715-3 ただいま弊社在庫はございません。 →本書の新版が発行されています。 本書のサポートページサンプルファイルのダウンロードや正誤表など この本の概要 ロングセラーシリーズ・ポケットリファレンスにC++が新登場。 「逆引き形式で目的からすぐ探せる」 「サンプルコードを見ながら具体的な実装のイメージがつかめる」 という特徴で,困ったときにすぐに役立ちます。 最新のC++11と現場のスタンダードであるC++03に対応。C++のエキスパートたちが執筆した,現場で役立つ1冊です。 こんな方におすすめ C++プログラマ C++11の特徴を手っ取り早く知って,使ってみたい方
C++にはガーベジコレクタが言語的には存在しないので、動的に確保したオブジェクトのメモリの管理はプログラマが責任を持って管理しなければ、メモリリーク・リソースリークなどの問題を生じてしまいます。 今時のプログラマはこうした問題を引き起こすリスクを減らす為に、記述ミスの起こりやすい生のポインタを使い自力でnewとdeleteを記述する事を避けて、安全なスマートポインタ、即ちオブジェクトの寿命により自動的にメモリ解放を行う便利なポインタを利用するべきです。 しかし、スマートポインタと言っても種類が幾つかあり、落とし穴も存在するのでどういった状況でどれを利用するのが良いのかを考察してみます。 Dynamic memory managementを見てみても C++11から随分増えていますね http://en.cppreference.com/w/cpp/memory std::auto_ptr
構造化プログラミング。 といえば、順次、分岐、ループのパターンからなる、シリアルプログラミングにおける基本スタイルですね。(これらだけしか使わなくてもシリアルプログラムは書けますっていうね) C++にはあらかじめこれらのパターンを簡単に使えるようにシンタックスが用意されています。 分岐はifやswitch、ループはwhile、for、doといったかんじで。 もちろんこれらのパターンは並列プログラミングでも使えます。 しかし並列プログラミングにおいては、これらのパターンだけで実装を行うことはほぼ不可能です。 そこで、並列プログラミングにおけるパターンとなる構造が考えられてきました。 これらを使うことで、よりパワフルかつ簡潔に並列プログラムのコードを書けるようになります。 1.マップ もっとも基本的な並列パターンです。 まず、コードを見てください。 template <class T> voi
ゲームプログラミングにおけるC++の都市伝説 † この記事は、C++ Advent Calendar 2012 22日目の記事です。 Prev 21日目の記事 CEANによる配列操作 Next 23日目の記事 構造化並列プログラミング 時間の関係で3つの都市伝説しかご紹介できませんでしたが、またの機会があれば他の都市伝説についてもお話したいと思います。 2012/12/22 written by h.godai @hgodai 目次 初めに 都市伝説1 C++は遅いのでゲームには向いていない 都市伝説2 boost::poolはゲームには向いていない 都市伝説3 boostライブラリは怪しいライブラリだ。使うと呪われる。 ↑ 初めに † かつて、8bit時代はゲームのプログラムはアセンブラが主流でした。やがて、ゲームのプラットフォームが16bitから32bitになるに従い、C言語でゲームが
有給を駆使し一足早くクリスマス休暇に突入、ヒャッホイ Ingress やるぜーと 意気込んでいた矢先ノロウイルスにやられダウンした。かなしい。鎮まれ俺の胃袋・・・ そんな腹痛日和の気晴らしとして今日は Garbage Collection Advent Calendar に参加してみることにしました。 Advent Calendar 初体験につきよくわかってないけど勝手に参加していいんですよね? GC というとジェネレーショナルだのパラレルコンカレントだのといった話が目立ちがちだけれど、 現実の問題というかブラウザを相手にするとそれ以外の細々とした面倒が目につく。 GC つき言語 (JavaScript) のコードと C++ で書かれたコードとの連携は最たる面倒の1つ。 たとえば WebKit の DOM は C++ で実装されており、 C++ のオブジェクトは JavaScript 処理
「サイボウズ・アドベントカレンダー」の4日目です(これまでの記事一覧)。どうやら三日坊主は免れたようです(笑)。 (0) はじめに こんにちは。サイボウズ・ラボの川合秀実です。私は主にサイボウズ製品の高速化のお手伝いをしています。しかし先日、製品とは関係ないものを高速化したので、今日はそれを発表します。 サイボウズには社内勉強会がいくつかあって、その中にはC++の勉強会もあります。私はサイボウズの勉強会に参加するのが好きなので、このC++の勉強会に参加してみました。この勉強会では、「数独」というパズルを解くプログラムをC++で書いてみよう、というのが最初のテーマでした。参加者各自がプログラムを書き、翌週にお互いにレビューしあうということが行われました。 ここで私はやらかしてしまいました。ええ、そうです、高速化してしまったのです! 言うまでもないですが、誰もこんなことは望んでいません。そもそ
class CSubClass : public CSuperClass { private: int subNum1, subNum2, subNum3; public: CSubClass(int n, int n1, int n2) : CSuperClass(n), subNum1(n1), subNum2(n2) { /// 代入での初期化は望ましくない。 subNum3 = n; } } 具体的には、subNum(n1), subNum2(n2), 等は、コンストラクタを呼び出して初期化しているのと同義です。 つまり、初期化子リストを用いず代入で初期化すると、(↑の例では、subNum3 がこれにあたる) 初期化子リストに無いメンバ変数が、デフォルトコンストラクタで初期化される。 デフォルトコンストラクタで初期化されたメンバ変数に、値を代入する。 ということになり、全く無意味
10月30日刊行予定『C++のためのAPIデザイン』につきまして、米ピクサー・アニメーション・スタジオ 手島孝人氏から推薦のコメントを頂きましたので、ここに一部抜粋してご紹介致します(全文は本書をご参照ください)。 ■推薦のことば(一部抜粋) APIデザイン。あまり聞き慣れない言葉です。この本は何か特殊な分野に関するC++のTipsを集めた参考書の一つなのでしょうか? いいえ、それは違うようです。 すでに世の中にC++プログラミングの参考書は数えきれないほどありますが、もし今、初心者の新人プログラマに参考書を渡すとしたら何だろう、と考えてみました。もちろん皆さんいろんなご意見があるかと思いますが、私ならまずは『ロベールのC++入門講座』、そして次に『Effective C++』を薦めるかと思います。まずはこれらで基本を学ぶとして、問題はその次です。『Modern C++ Design』や難
あ\n こんにちは、fadisです。★最近話題の某A社で働いています。★きな言語はC++、好きなエディタはVim、好きなディストリはGentooですが、昨日東京の方でやっていた闇鍋プログラミング勉強会によると、★この3つはTLから変態を検出するキーワードとして使えるらしいです。ちょっと、こんなに健全な人が変態に分類されるとか誤認識にも程があると思うのですが、\n こんにちは、fadisです。★最近話題の某A社で働いています。★きな言語はC++、好きなエディタはVim、好きなディストリはGentooですが、昨日東京の方でやっていた闇鍋プログラミング勉強会によると、★この3つはTLから変態を検出するキーワードとして使えるらしいです。ちょっと、こんなに健全な人が変態に分類されるとか誤認識にも程があると思うのですが、\n こんにちは、fadisです。★最近話題の某A社で働いています。★きな言語はC
そういえば C++ のヘッダファイルを #include するだけで使える GC を書きました。使い方は下のサンプルコードを見てもらえばいいとして、特徴としては、 ヘッダファイルを #include するだけで使える C++ の標準機能だけを使っているのでポータブル*1 mark-and-sweep, precise GC ってなあたりでしょうか。コードは GitHub - kazuho/picogc: a tiny, portable, precise, mark-and-sweep GC in C++ にあります。 C++ のプロジェクトで、ちょっとここだけは GC がほしいんだけど、ってなケースで使いやすいと思います。速度も、そこそこでるんじゃないかな*2。 というわけで、以下、サンプルコード。軽く説明しておくと、 GC を使うクラスは picogc::gc_object を継承する
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く