We tried to load scripts but something went wrong. Please make sure that your network settings allow you to download scripts from the following domain: https://id-frontend.prod-east.frontend.public.atl-paas.net
Twitter 上で C++ STL の vector に関して評価順序不定ではまっているコードの例が流れていてそこから C 言語における(規格上の)落とし穴に行き着いたのでメモ。 // from http://www.jpcert.or.jp/sc-rules/c-exp35-c.html #include <stdio.h> struct X { char a[6]; }; struct X addressee(void) { struct X result = { "world" }; return result; } int main(void) { printf("Hello, %s!\n", addressee().a); return 0; } 上記コードは C++ では問題ないコードであるが、一方 C99 では未定義動作を含むコードである。理由はJPCERT のページに記述
boost::shared_ptr は動的削除子 (dynamic deleter) と呼ばれる技法に基づいて実装されています.この動的削除子という技法で重要なのは, boost::shared_ptr が最終的に呼び出す解放処理が boost::shared_ptr のテンプレート引数の型に関係なく,コンストラクタに実際に渡されたポインタの型で,かつ boost::shared_ptr のコンストラクタの呼び出しの段階で 決定する,ということです. 以下のようなコードが,動的削除子の効果が一番分かりやすい例になるでしょう. class X{ public: ~X() { std::cout << "X::~X" << std::endl; } }; class B{ public: ~B() // virtual でないことに注意!! { std::cout << "B::~B" <<
たとえば libevent のような C 言語でかかれたイベント駆動型のライブラリを C++ から使っていると、C++ のメンバ関数をコールバックとしてセットできたらうれしいことが多いですよね。以下のようにすればできます。 たとえば、コールバック関数をセットする関数の型が、 void set_foo_callback(void (*)(void* cb_arg), void* cb_arg); なら、以下のようにクラスとメンバ関数を引数にとるテンプレート関数を定義し、 template <typename T, void (T::*FUNC)()> void to_foo_callback(void* cb_arg) { T* obj = reinterpret_cast<T*>(cb_arg); (obj->*FUNC)(); }以下のように受け渡せばいい。 class K { publ
C++ Advent Calendar です。 google の V8 engine を 組み込んで簡易スクリプトにしてしまおうという話です。 C++の言語仕様や boost の話は超絶詳しい人たちがされているので、誰もやらなそうな ぬるいいい加減な話をします。 #間違ってたら突っ込みよろしく!! なぜ V8? Lua ぢゃだめなんですか? C++ から呼び出しやすい 組み込み言語として、 Luaがあります。 しかし、 Luaはコメントが -- から始まったり、 〜end と、 C / C++ に組み込みやすいスクリプト言語なのになぜか pascal チックな文法?という不思議なところがあります。 やはり、 C++ ユーザとしてはコメントは // で書きたいし、ブロックは { } でやりたいですよね (y/Yes) そんなところに、 google の V8 engine があります。 C+
こんにちは、人恋しい季節になってきましたね。 研究開発チームの祢次金(@nejigane)と申します。 本エントリではCinderというクリエイティブなコーディング向けのライブラリについてご紹介したいと思います。 Cinderとは Cinderとは、画像、音声、動画等を簡単に処理&可視化できる、主にビジュアルデザイン向けの強力なC++ライブラリであり、The Barbarian GroupのAndrew Bell氏が中心となってオープンソースとして開発が進められています。 同様の思想を持つProcessingやopenFrameworksによく似ており、C++で簡単に記述できるうえ、Windows、MacOSX、iOS(iPhone/iPad)といった複数のプラットフォームをカバーしています。 細かい機能/特徴の紹介は本家サイトに譲るとして、Cinderを極めるとどのぐらいクリエイティブな
「Kyoto Tycoonの設計 その四」改め、50行でWebサーバを書く方法を解説する。前回実装した「多重I/Oマルチスレッド汎用TCPサーバ」の上にHTTPの処理を行う層をつけて、「多重I/Oマルチスレッド汎用HTTPサーバ」を司るクラスを実装してみたので、それを使ってちょちょいとやる。 URLクラス HTTPと言えばURLが使えないと意味がない。URLは単なる文字列として扱ってもよいのだが、様々なシーンで分解や加工が必要になり、その処理はなにげに複雑で面倒なので、予めクラスとして導出しておいた方がよいだろう。 class URL { public: // 文字列のURLを解析して内部構造を作る void set_expression(const std::string& expr); // スキーム要素を設定する void set_scheme(const std::string&
何気なく呟いた言葉が確変状態になっていました。 それで、反応を眺めていると「何をやってるか分からない」と言うものがいくつかあったので、一応簡単な補足説明を載せておきます。 #include は指定したファイルの内容をその位置に追加します。 1, 2, 3, 4, 5, 6, 7, 8, 9,例えば、上記の内容を hoge.csv と言う名前で保存して、 int hoge[] = { #include "hoge.csv" }; と記述すると、(プリプロセスが終了すると)以下のように記述した事と同じになります*1。 int hoge[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, }; このように、#include を利用することによって、内容が変化しない*2データ配列などの定義を自力で打ち込んだりコピペしたりせずに済むようになります(なることがあります)。s/int/co
例えばこう、ディレクトリの名前とその中のファイル名を / でくぎって結合する関数を書くとします。引数が std::string でも使いたいし const char* でも使いたい、ということで、たいていは void JoinFilePathStr(const string& dir, const string& base, string* out) { out->clear(); out->append(dir); out->push_back('/'); out->append(base); }なんてのを書くんじゃないかと思います。この関数で問題になるのは const char* を渡すと不要な string object が一度できることで、敬虔な C++ 屋さんだと、 void JoinFilePathStr(const string& dir, const char* base,
私は「virtual」を「仮想」と訳すのにすごく抵抗がある。 「virtual」って英語本来の意味は、「実質上の」「実際上の」というような意味だ。「表面的にはそうではないが実質的にはこれなんだ」というような時に使う。 「virtual memory」を「仮想記憶」と訳すと「実際は存在しないメモリ」であるかのように思える。現実的に存在しないのなら無くても構わないようにすら思える。確かに物理的には存在しないから実在はしないんだけど、かと言って不要というわけでもなく、「virtual memory」本来の意味は「(ユーザーアプリなどが)実際に使うときのメモリ」みたいなニュアンスで「無くても構わないメモリ」とは、ちょうど真逆の意味だ。 「仮想」という言葉が、「存在しない」という否定っぽい語感なのに対して、「virtual」本来の意味は「実質上(は、これだ)」という肯定っぽい意味だからどうもギャップ
作成日:2004.05.04 修正日:2012.09.01 このページは 2003年の9/11、9/28 の日記をまとめて作成。 はじめに PowerPC 系や Alpha などには population count と呼ばれるレジスタ中の立っているビット数を数える命令が実装されている。 集合演算を行うライブラリを実装したい場合などに重宝しそうな命令である。 職場でこの population count 命令について話をしているうちにビットカウント操作をハードウェアで実装するのは得なのか?という点が議論になった。 CPU の設計をできるだけシンプルにするためには、複雑で使用頻度の低い命令は極力減らした方がよい。 例えば SPARC は命令セット中にビットカウント演算があるが、CPU 内には実装しないという方針をとっている(population 命令を実行すると不正命令例外が発生し、それを
19 名前:デフォルトの名無しさん[sage] 投稿日:2007/01/03(水) 20:25:25 前スレ >>984 何度か出てるけどコンパネの 「地域と言語のオプション」−「言語」−「テキストサービスと入力言語」−「詳細」− 「詳細設定」−「詳細なテキストサービスをオフにする」 にチェックを入れるとフリーズは改善する可能性が高いよ。 マルチスレッド周りでデバッグ中に固まる一因が、「詳細なテキストサービス」らしいから そうなのか。 http://support.microsoft.com/default.aspx?scid=kb;ja;898663 http://support.microsoft.com/kb/282599/JA/ http://questionbox.jp.msn.com/qa4281023.html のだった。
Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く