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
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
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); //何か処理を書きます。
C言語やC++,Javaにはvolatileという修飾子があります。組み込み系ソフトウェアやマルチスレッドのアプリケーションを書いている方にとっては、なじみ深い存在ですが、そうでない方にはあまり縁がないのかもしれません。しかし、volatileの使い方や存在意義を知らないままコーディングを行うと、思わぬバグを引き起こす場合があります。今回は、そのvolatileキーワードについて簡単に説明したいと思います。 volatileは初期のCであるK&Rには含まれていませんでしたが、ANSI C(C89)以降のC標準規格にはconstと一緒に含まれるようになりました(constとvolatileをあわせてcv修飾子と呼ぶこともあります)。一般的なCなら必ず備えている修飾子です。 volatile修飾子の意味ですが、「プログラミング言語C ANSI規格準拠」によると、 volatileの目的は,黙っ
前回(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,
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 ); // 中身が
最近、数年ぶりに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
Windowsの描画機能(GDI)には、GDIの描画結果を保持しておくためのビットマップ(ハンドル型HBITMAPで管理されるデバイス依存のビットマップ-DDB)があります。このビットマップを使うと、GDIの機能を使って描いた描画内容を画像として保存しておけるので、GDIでグラフを描いてウインドウなどに表示する場合に便利です。ビットマップを使わないと、ウインドウの再描画時(WM_PAINT処理時)に毎回GDIでグラフを描かないといけませんが、グラフをビットマップに描いておけば、そのビットマップを描画するだけですむからです。 こうした「ビットマップに一度描いてからそのビットマップを表示する」方式は、ダブルバッファと呼ばれ、処理の効率化と描画時のちらつきを抑えるのに効果的です。ゲームプログラミングでも、ゲームの画面は基本的にビットマップ(DDBとは限りませんが)に描かれますね。 DDBの作成と
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
本日の格言(俺用の) 冗長性のない、つまり同じ値がダブって入っているということのない、要素の集合を作りたいんなら、冗長な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
アメリカ時間の昼ごろにTwitter上が一つのニュースで埋め尽くされました。 PHPをC++に変換して高速化する技術をFacebookが公開したというものです。世界中のPHPハッカーが注目する興味深いリリースという事でちょっと長いですが、リリースノートの和訳を行いました。 原文 http://developers.facebook.com/news.php?blog=1&story=358 Facebookにおいて重要なことのひとつが動作の速さです。過去6年間にわたって、PHPが提供する高速な開発ペースによって多くを成し遂げてきました。プログラミング言語としてみると、PHPはシンプルです。簡単に習得し、簡単に書き、簡単に読み、簡単にデバッグする事ができます。我々は他の言語よりも早くエンジニアを獲得し、それによってより早いイノベーションをすることができます。 今日、私は2年に渡って作業して
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/
Google が公開しているソフトウェアの解説シリーズ(→その1 , その2)の続きです。今回は google-glog を使ってスタックトレースを表示する方法についてご紹介します。 C++ でプログラムを書いているとよく遭遇するのがセグメンテーション違反というエラーです。不正なアドレスへのアクセスなどによりセグメンテーション違反が起きると、通常、 UNIX 系の OS では SIGSEGV というシグナルによってプログラムが終了するとともに、 core というファイルが作られます。 core ファイルにはデバッガから参照できるいろいろな情報が残っていますが、多くの場合に役に立つのは、スタックトレースという情報です。スタックトレースを見れば、プログラムがどこでクラッシュしたのか、どのような関数を経由してそこにたどり着いたのかがわかります。プログラムがクラッシュした箇所を特定できれば、単純な
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")->
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く