タグ

c|c++に関するfubar_fooのブックマーク (59)

  • return vector<Foo> or shared_ptr<vector<Foo>>?

  • Returning a const reference to an object instead of a copy

    Whilst refactoring some code I came across some getter methods that returns a std::string. Something like this for example: class foo { private: std::string name_; public: std::string name() { return name_; } }; Surely the getter would be better returning a const std::string&? The current method is returning a copy which isn't as efficient. Would returning a const reference instead cause any probl

    Returning a const reference to an object instead of a copy
    fubar_foo
    fubar_foo 2013/09/05
    メンバー変数の場合はconst referenceで返してもOK.そうでない場合は普通にコピーするかshared_ptr.普通のコピーでもコンパイラ最適化で効率的なコードは生成できる.
  • pugixml.org - Home

    Light-weight, simple and fast XML parser for C++ with XPath support Repository: github.com/zeux/pugixml Git and Subversion access Downloads: pugixml-1.14.zip 409 KB, Windows line endings pugixml-1.14.tar.gz 377 KB, Unix line endings Documentation: Quick-start guide Read this to start using the library Complete reference manual Read this for full library reference Benchmarks License Support: Issue

  • Google Sites: Sign-in

    Not your computer? Use a private browsing window to sign in. Learn more about using Guest mode

  • 『メモリリークを起こりにくくするには?』

    C++ フリーでぷろぐらみんぐ 逆引きリファレンス。 C++のやりたい事から引ける逆引きメモを書いています。 何かコメントなどいただけると嬉しいです! C++と言えば、メモリリークが最大の急所でしょう。 これをなんとか防ぎたいですよね。 【サンプル】 #include <cstdlib> #include <iostream> #include "boost/shared_ptr.hpp" #include "boost/tokenizer.hpp" using namespace std; using namespace boost; void test() { //何回も使用する場合は、型宣言しましょう typedef shared_ptr<string> char_ptr; //newしたら、すぐ代入します char_ptr cp(new string); //何か処理を書きます。

  • volatileで最適化を抑制する - 職業としてのプログラミング

    C言語やC++,Javaにはvolatileという修飾子があります。組み込み系ソフトウェアやマルチスレッドのアプリケーションを書いている方にとっては、なじみ深い存在ですが、そうでない方にはあまり縁がないのかもしれません。しかし、volatileの使い方や存在意義を知らないままコーディングを行うと、思わぬバグを引き起こす場合があります。今回は、そのvolatileキーワードについて簡単に説明したいと思います。 volatileは初期のCであるK&Rには含まれていませんでしたが、ANSI C(C89)以降のC標準規格にはconstと一緒に含まれるようになりました(constとvolatileをあわせてcv修飾子と呼ぶこともあります)。一般的なCなら必ず備えている修飾子です。 volatile修飾子の意味ですが、「プログラミング言語C ANSI規格準拠」によると、 volatileの目的は,黙っ

    fubar_foo
    fubar_foo 2012/02/26
    volatileでコンパイラが勝手に最適化してしまうことを防ぐ for マルチスレッドコード
  • Tutorial - 1.48.0

    fubar_foo
    fubar_foo 2012/02/13
    boost::variantとapply_visitorについて
  • variantの実装(4) -static_visitor- - while( c++ );

    前回(variantの実装(3) -placement new- - while( c++ );)のつづき。 variantに任意のオブジェクトを格納することが出来たので、今回はオブジェクトを取り出してみます。 variantに格納されているのオブジェクト(storage_)の型は、メンバwhich_で型に対応する番号として管理されています。 template< typename T1, typename T2, ..., typename TN > class variant { storage_type storage_; int which_; //T1 -> 1 //T2 -> 2 // ... //TN -> N }; ということは、前回のデストラクタのようにwhich_の値でキャストすればよさそうですね。 template< typename T1, typename T2,

  • letsboost::variant

    abstract 必要なヘッダ <boost/variant.hpp> 出来ること 指定した型リストに属する値を格納できる、安全Union リファレンス en sample #include <iostream> #include <string> #include <boost/variant.hpp> using namespace std; // 「2倍する」Visitor struct do_double : boost::static_visitor<void> { template<typename T> void operator()( T& t ) const { t = t + t; } }; int main() { boost::variant<int,double,string> v; v = -2; assert( v.which() == 0 ); // 中身が

    fubar_foo
    fubar_foo 2012/02/13
    共用体(Union)のクラス版.再帰的に利用できるみたいなのでPHPのarray的なものを作れそうな気がする
  • 久々にC++使ったら進化してて素敵になってた件 – taichino.com

    最近、数年ぶりにC++を触っているのですが、いつの間にかかなり使いやすくなっていました。まだ全容は把握できてないのですが、とりあえず印象に残った以下の項目について書いてみたいと思います。 BOOST_FOREACHとautoですっきりループ tupleで無くなる無駄な構造体 #pragma onceで楽々インクルードガード std::functionとlamda関数でコンパクトなコード typeidでリフレクション 主にC++0x周りの話だと思っていますが、勘違いしている可能性も高いです。 前置きですが、エントリ内のコードはすべてgccの4.5.0で動作確認を行っています。(mac portのgcc45パッケージをインストールしました)。またビルド時にはc++0xの使用を明示する必要があります。 $ g++-mp-4.5 -std=c++0x main.cpp 1. BOOST_FORE

  • Chapter�25.�Boost.Xpressive - 1.36.0

  • Loading...

  • GDIビットマップ(DDB)作成

    Windowsの描画機能(GDI)には、GDIの描画結果を保持しておくためのビットマップ(ハンドル型HBITMAPで管理されるデバイス依存のビットマップ-DDB)があります。このビットマップを使うと、GDIの機能を使って描いた描画内容を画像として保存しておけるので、GDIでグラフを描いてウインドウなどに表示する場合に便利です。ビットマップを使わないと、ウインドウの再描画時(WM_PAINT処理時)に毎回GDIでグラフを描かないといけませんが、グラフをビットマップに描いておけば、そのビットマップを描画するだけですむからです。 こうした「ビットマップに一度描いてからそのビットマップを表示する」方式は、ダブルバッファと呼ばれ、処理の効率化と描画時のちらつきを抑えるのに効果的です。ゲームプログラミングでも、ゲームの画面は基的にビットマップ(DDBとは限りませんが)に描かれますね。 DDBの作成と

  • C++ Style Guide

    Benjy Weinberger Craig Silverstein Gregory Eitzmann Mark Mentovai Tashana Landray This style guide contains many details that are initially hidden from view. They are marked by the triangle icon, which you see here on your left. Click it now. You should see "Hooray" appear below. Hooray! Now you know you can expand points to get more details. Alternatively, there's an "expand all" at the top o

  • std::setで非冗長化を図るのはやめよう - nursの日記

    日の格言(俺用の) 冗長性のない、つまり同じ値がダブって入っているということのない、要素の集合を作りたいんなら、冗長なvectorを作ってから、sortして、erase, unique で冗長性を取り除くべし。一度setに詰めてからvectorに戻すなんてことするとメチャメチャ遅いぞ。やってらんないくらい遅いぞ。もったいないぞ。std::setは検索をしたい時のみに、あくまで検索目的で使うものだぞ。 template< class CONT > void pocRemoveRedundancy( CONT& cont ) { // コンテナの冗長性を取り除く関数テンプレート sort( cont.begin(), cont.end() ); cont.erase( unique( cont.begin(), cont.end() ), cont.end() ); return; } Ef

    std::setで非冗長化を図るのはやめよう - nursの日記
  • PHPをC++に変換して高速化する「HipHop for PHP」をFacebookが公開 : candycane development blog

    アメリカ時間の昼ごろにTwitter上が一つのニュースで埋め尽くされました。 PHPC++に変換して高速化する技術をFacebookが公開したというものです。世界中のPHPハッカーが注目する興味深いリリースという事でちょっと長いですが、リリースノートの和訳を行いました。 原文 http://developers.facebook.com/news.php?blog=1&story=358 Facebookにおいて重要なことのひとつが動作の速さです。過去6年間にわたって、PHPが提供する高速な開発ペースによって多くを成し遂げてきました。プログラミング言語としてみると、PHPはシンプルです。簡単に習得し、簡単に書き、簡単に読み、簡単にデバッグする事ができます。我々は他の言語よりも早くエンジニアを獲得し、それによってより早いイノベーションをすることができます。 今日、私は2年に渡って作業して

  • Ruby 拡張モジュール入門 / SlideShare

    2. おしながき おしながき 拡張モジュールとは なにもしない拡張モジュール hello.so 拡張モジュールを作る前に まとめ 2007-11-17 Ruby 勉強会@札幌 #6 1 4. 拡張モジュールって何? 拡張モジュールって何? 拡張モジュールとは・・・ Ruby では実現不可能だけど,C ⾔語なら実現可 能な事柄を,C ⾔語で実装して Ruby から使えるよ うにするための共有ライブラリ Ruby で実装すると遅いけど,C ⾔語なら実⽤的な 実⾏速度を実現できるようなアルゴリズムなどを,C ⾔語で実装して Ruby から使えるようにするための 共有ライブラリ アセンブリ⾔語も使えるよ\(^o^)/ 2007-11-17 Ruby 勉強会@札幌 #6 3 5. 拡張モジュールの例 拡張モジュールの例 標準添付 独⽴配布 Ruby/OpenSSL Ruby/GNOME2 Ruby/

    Ruby 拡張モジュール入門 / SlideShare
  • C++ のプログラムのデバッグを楽にする方法

    Google が公開しているソフトウェアの解説シリーズ(→その1 , その2)の続きです。今回は google-glog を使ってスタックトレースを表示する方法についてご紹介します。 C++ でプログラムを書いているとよく遭遇するのがセグメンテーション違反というエラーです。不正なアドレスへのアクセスなどによりセグメンテーション違反が起きると、通常、 UNIX 系の OS では SIGSEGV というシグナルによってプログラムが終了するとともに、 core というファイルが作られます。 core ファイルにはデバッガから参照できるいろいろな情報が残っていますが、多くの場合に役に立つのは、スタックトレースという情報です。スタックトレースを見れば、プログラムがどこでクラッシュしたのか、どのような関数を経由してそこにたどり着いたのかがわかります。プログラムがクラッシュした箇所を特定できれば、単純な

    C++ のプログラムのデバッグを楽にする方法
  • perl から任意の C ライブラリを呼び出す方法 - kazuhoのメモ置き場

    syscall って組込関数でシステムコールはできますけど、libc やその他ライブラリの関数を呼びたい、ってこともありますよね。i386 かつ dlopen な環境なら、こんな風に書けます。 use DynaLoader; use ops; sub ccall { my $r = '1111'; my $s = "\x68" . pack("L", $_[5]) . "\x68" . pack("L", $_[4]) . "\x68" . pack("L", $_[3]) . "\x68" . pack("L", $_[2]) . "\x68" . pack("L", $_[1]) . "\xb8" . pack("L", ("Dyna"."Loader")->can("dl_find_symbol")->(("Dyna"."Loader")->can("dl_load_file")->

    perl から任意の C ライブラリを呼び出す方法 - kazuhoのメモ置き場