タグ

c++に関するnilabのブックマーク (204)

  • STL のコンテナにデフォルトコンストラクタが無いクラスのオブジェクトを突っ込むお話 - Cry’s Diary

    STL のコンテナの要素になるために必要な要件は CopyConstructible (20.1.3/1 と Table 30) - 要するにコピーコンストラクタを持っていて,その意味がコピーとしてきちんと定義されていること Assignable (23.1/4 と Table 64) - 要するに代入演算子(operator=)を持っていて,その意味がコピー代入としてきちんと定義されていること (例外安全性の要件として,コピーコンストラクタと代入演算子(operator=)が強い例外安全性を保証すること,及びデストラクタが例外を送出しないこと(no-throw)を保証すること) (ちなみに SGI STL の記述では上2つを合わせたものが Assignable コンセプトになっている) 以上です.特に注意すべきこととして,デフォルトコンストラクタが無いクラスのオブジェクトを突っ込むことが

    STL のコンテナにデフォルトコンストラクタが無いクラスのオブジェクトを突っ込むお話 - Cry’s Diary
    nilab
    nilab 2012/05/08
    2006-04-11 - Cry’s Diary : [C++]STL のコンテナにデフォルトコンストラクタが無いクラスのオブジェクトを突っ込むお話
  • C++ discards qualifiers - 【はてな】ガットポンポコ

    nilab
    nilab 2012/05/08
    C++ discards qualifiers - ガットポンポコ : 「const関数にしてない関数でconstメンバ変数を使おうとしているときに出る」
  • テンプレート関数

    汎用関数 ここでは、C++言語の高い柔軟性の実現の一つ テンプレートについて、説明していきます テンプレートの概念は、オブジェクト指向で名高い Java にすらない、すばらしい機能です プログラムでは、内部処理は同じだがデータ型が異なる関数が頻繁に出てきます とくにアルゴリズムにおける関数では、その様なケースが多いです 全てのデータ型の関数をオーバーロードでサポートするのも一つの方法ですが この作業は面倒で、しかもソースの可読性も低下させてしまいます そこで、この作業を全てコンパイラに任せてしまうのが汎用関数なのです 汎用関数は、各データ型を受け取ることができます しかし、オーバーロードとは異なり内部処理は同じです このような汎用関数をテンプレート関数とも呼び 次のように template キーワードを用いて宣言します template <class type> function-decl

    nilab
    nilab 2012/04/26
    テンプレート関数
  • C++で後置インクリメントよりも前置インクリメントが多用される理由 - 考える人、コードを書く人

    追記(2015/04/19): 後置を使うべきという意見もあるようです -> 前置インクリメント vs 後置インクリメント | 闇夜のC++ C++を勉強し始めるまでは特に必要がない限り、値をインクリメントする際は前置ではなく、後置でやっているのを見かけるのが多かったのですが、C++や解説サイトを見ると、インクリメントが後置ではなく、前置になっているのをよく見かけます。 昨日まで単にC++のスタイル的な問題なんだろうと思っていたのですが、どうやらもっとちゃんとした理由があるようです。 某IRCで話を振ったら、友達が教えてくれました。 前置インクリメントと後置インクリメント まず、インクリメントを使った例としてfor文によるループを考えてみます。 C言語で書くと例えば以下のようになります。 for (i=0;i<n;i++) { ... } C++でも同じように書けます。 for (i=

    C++で後置インクリメントよりも前置インクリメントが多用される理由 - 考える人、コードを書く人
    nilab
    nilab 2012/04/17
    前置インクリメント(++a)の場合、インクリメント後の値を返す必要がある。後置インクリメント(a++)の場合、インクリメント前の値を返す必要がある。 / C++で後置インクリメントよりも前置インクリメントが多用される理由
  • C++Now

    I attended C++Now for the first time last year (2017), and it was a great experience! The talks were all excellent, but the best part was the interaction with other attendees. This is the conference to attend for an in-depth and technical C++ experience like no other.Bob SteagallKEWB Computing To hear the answer to a C++ question, go to CppCon. If you want to be part of finding the answer, go to C

    nilab
    nilab 2012/03/29
    C++Now! | Conference May 13 – 18, 2012 Aspen, Colorado
  • GitHub - fredericgermain/LeakTracer: Continuation of the LeakTracer project

    nilab
    nilab 2012/03/06
    fredericgermain/LeakTracer · GitHub
  • LeakTracer - trace and analyze memory leaks in C++ programs

    Oct 2011 UPDATE: Frédéric Germain has setup a Github page containing all the below patches and additional new features, see: https://github.com/fredericgermain/LeakTracer. This is the newest version; all the below source code and documentation are of historic interest only. LeakTracer is a small tool I wrote when checking a C++ program for memory leaks. I couldn't get dmalloc to display what I wan

    nilab
    nilab 2012/03/06
    LeakTracer - trace and analyze memory leaks in C++ programs
  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

    nilab
    nilab 2012/02/16
    C++におけるタイプセーフEnumのイディオム
  • Idioms for Typesafe Enums in C++

    We "discover" two (perhaps) novel C++ programming idioms, the Enum Literal idiom the Private Inherited Enum idiom by starting with Joshua Bloch's typesafe enum pattern for Java, then exploring ways to translate that into C++. C++ does have builtin enums, but they are not sufficiently typesafe for many peoples' taste, including mine. enum Suit { CLUBS, ... }; enum Suit x = CLUBS; // OK enum Suit y

    nilab
    nilab 2012/02/16
    Idioms for Typesafe Enums in C++
  • Typesafe Enum イディオム - Cube Lilac

    enum を使って定数を定義する場合に,それらの値を使うときは「型名::値」と言う形で記述したいなぁとよく思うのですが,普通の記述 (enum 型名 { ... };) だとこの要求を満たせません.それで,これまで enum を使うときは enum の型名にあたる部分を名前空間に書くことでそれっぽい記述ができるようにしていました. namespace Fruits { enum { Apple, Orange, Lemon, Banana }; } int main(int argc, char* argv[]) { int kind = Fruits::Orange; switch (kind) { case Fruits::Apple: ...; case Fruits::Orange: ...; case Fruits::Lemon: ...; case Fruits::Banana

    Typesafe Enum イディオム - Cube Lilac
    nilab
    nilab 2012/02/16
    Typesafe Enum イディオム - Life like a clown
  • POCO C++ Libraries

    NOTE: Current source code as well as bugs/patches are on GitHub: https://github.com/pocoproject/poco/ C++ class libraries for network-centric, portable applications, integrated perfectly with the C++ Standard Library. Includes network protocols (Sockets, HTTP, FTP, SMTP, POP3, etc.), SQL database access and XML parsing. Licensed under Boost license. Features cross-platform and platform abstraction

    nilab
    nilab 2012/02/16
    SourceForge.net Repository - [poco] Index of /sandbox/PDF
  • Boost.勉強会 #8 大阪で発表してきた - Ideals and Reality

    Boost.勉強会 #8 大阪へいってきました。 そして闇の軍団に囲まれながら喋ってきました。 カスタムメモリマネージャと高速なメモリアロケータについて View more presentations from alwei 内容はメモリを管理しつつ様々な恩恵を受けられるカスタムメモリマネージャの話と非常に高速に動作するメモリアロケータの話です。 ゲームでは割りと一般的な話ですが、あまり他の業界のプログラマには知られていないのかなと思い、今回の発表内容にしました。 更に今回の発表中にVimを使ったライブコーディング的な実演も挟みました。 その時に使ったコードもGitHubで公開しています。 【MemoryMaster】 実はまだこのメモリマネージャとメモリプールは問題が多いので実用は出来ないです。 具体的に言うと、 例外を使っていない スレッドセーフじゃない MakeMemoryPoolはコ

    Boost.勉強会 #8 大阪で発表してきた - Ideals and Reality
    nilab
    nilab 2012/02/15
    Boost.勉強会 #8 大阪で発表してきた - Ideals and Reality : 「カスタムメモリマネージャと高速なメモリアロケータについて」
  • undefined reference to `vtable...の対処 - 三次元日誌

    こんなエラーが出た ../opengl/debug/libgldriver.a(opengl.o):opengl.cpp:(.text$_ZN6opengl5JointD1Ev[opengl::Joint::~Joint()]+0x3a): undefined reference to `vtable for opengl::Joint' こうなっていたのを class IJoint { 省略(virtualのインターフェースを宣言している) }; class Joint : public IJoint { 省略 }; ↓ ベースクラスのほうに追加する class IJoint { // opengl::Joint::~Joint()のエラー virtual ~IJoint(){} }; と追加したらなおった。 どういう基準で必要になるのかよくわからないが対処として。 もうひとつの罠 単に

    undefined reference to `vtable...の対処 - 三次元日誌
    nilab
    nilab 2012/02/01
    (;・∀・)「仮想関数を継承した方のクラスの実装をすべてヘッダに書いた状態でスタティックライブラリにしていたのがよくなかった」undefined reference to `vtable...の対処 - 三次元日誌
  • FAQ形式でデストラクタにvirtualを付ける理由をまとめてみた - かせいさんとこ

    Q1: デストラクタにvirtualをつけろとよく言われるけど、なんで? 挙動が未定義のdeleteを呼び出す可能性があるから Q2: 挙動が未定義だと駄目なの? 超駄目。何が起きても文句は言えない Q3: どんな時に挙動が未定義のdeleteが呼び出されるの? こんなとき // NoVirtualBaseClass : デストラクタにvirtualを持たない // NoVirtualSuperClass : NoVirtualBaseClassを継承 NoVirtualBaseClass * ptr = new NoVirtualSuperClass(); // 挙動が未定義 delete ptr; Q4: 何でそうなるの? delete時点で、ptrは自分がNoVirtualBaseClassのインスタンスだと思ってるから Q5: 何で?NoVirtualSuperClassでnewし

    FAQ形式でデストラクタにvirtualを付ける理由をまとめてみた - かせいさんとこ
    nilab
    nilab 2012/02/01
    FAQ形式でデストラクタにvirtualを付ける理由をまとめてみた - かせいさんとこ
  • 基底クラスには仮想デストラクタをもたせよう 14項 - higepon blog

    今日はとても大事な話なので、結論から 基底クラスとして使うであろうクラスは、デストラクタを必ず virtual とする 基底クラスとして使わない(継承するつもりがない)クラスは、デストラクタをvirtual にしない。 なぜか? 1.について Class BaseHige { public: BaseHige(); ~BaseHige(); }; Class SuperHige : public BaseHige { public: SuperHige(); ~SuperHige(); }; のような継承関係があるとして BaseHige* basePtr = new SuperHige(); delte basePtr; とした場合、BaseHige, SuperHige両方のデストラクタが呼ばれることを期待しているのだが実際はそうはならない。 基底クラスのポインタを介しての delet

    基底クラスには仮想デストラクタをもたせよう 14項 - higepon blog
    nilab
    nilab 2012/02/01
    基底クラスには仮想デストラクタをもたせよう:継承するつもりがないクラスはデストラクタをvirtual にしない:仮想関数テーブルが作られてしまい、オブジェクトのサイズが2倍になってしまい可搬性が失われてしまうから
  • Using and Porting the GNU Compiler Collection (GCC) - GCCコマンド・オプション

    GCCを起動すると、 通常は、 前処理(preprocessing)、 コンパイル、 アセンブル、 リンクが行われます。 「全体的(overall)オプション」によって、 この一連の処理を中途の段階で停止することができます。 例えば、 `-c'オプションはリンカを起動しないよう指示するものです。 この場合、 アセンブラによって生成されるオブジェクト・ファイルが出力となります。 他のオプションは、 一連の処理の中の1つの段階に渡されるものです。 オプションの中には、 プリプロセッサを制御するものもあり、 コンパイラ自体を制御するものもあります。 また、 アセンブラやリンカを制御するオプションもありますが、 それらのほとんどは、 ここではドキュメント化されていません。 というのは、 このようなオプションを使うことが必要になることはめったにないからです。 GCCにおいて使うことのできるコマンドラ

    nilab
    nilab 2012/01/27
    Using and Porting the GNU Compiler Collection (GCC) - GCCコマンド・オプション : ディレクトリ探索のためのオプション 『-I』 ハイフンI, ハイフンアイ
  • POCO C++ Libraries - Simplify C++ Development

    The POCO C++ Libraries are powerful cross-platform C++ libraries for building network- and internet-based applications that run on desktop, server, mobile, IoT, and embedded systems. Latest Release: 1.13.2 [Changelog] Get Started! The POCO C++ Libraries have been trusted by C++ developers worldwide for 18 years to build challenging and mission-critical applications in a wide variety of industries.

    POCO C++ Libraries - Simplify C++ Development
    nilab
    nilab 2012/01/27
    Overview | POCO C++ Libraries : "Modern, powerful open source C++ class libraries and frameworks for building network- and internet-based applications that run on desktop, server and embedded systems."
  • Features - gtkmm - C++ Interfaces for GTK and GNOME

    gtkmm is the official C++ interface for the popular GUI library GTK. Highlights include typesafe callbacks, and a comprehensive set of widgets that are easily extensible via inheritance. You can create user interfaces either in code or with the Cambalache User Interface designer, using Gtk::Builder. There's extensive documentation, including API reference and a tutorial. gtkmm is free software dis

    nilab
    nilab 2012/01/26
    Features - gtkmm - C++ Interfaces for GTK+ and GNOME
  • cairomm: Cairomm: A C++ wrapper for the cairo graphics library

    License Cairomm is available under the terms of the LGPL license Introduction If you're just beginning to learn cairomm, a good place to start is with the Cairo::Surface and Cairo::Context classes. In general terms, you draw onto a Surface using the graphics settings specified in your Context.

    nilab
    nilab 2012/01/26
    cairomm: Cairomm: A C++ wrapper for the cairo graphics library
  • [ヅ] C++のクラスのオブジェクト配列を生成するサンプル (2012-01-16)

    nilab
    nilab 2012/01/16
    _[ヅ] C++のクラスのオブジェクト配列を生成するサンプル