タグ

C++に関するfa11enprinceのブックマーク (126)

  • [迷信] コンストラクタから例外を送出してはならない | 株式会社きじねこ

    株式会社きじねこは大阪のソフトウェア開発会社です。組込み系・業務系のプログラム開発から電子回路の設計までおまかせください。 比較的有名なサイトで「コンストラクタからの例外送出」が「禁じ手」として紹介されていることもあり、また、最近ではその内容を再編集した書籍が出版されたこともあって、コンストラクタから例外を送出すべきではないと考える人は多いようです。 その根拠となっているのは、コンストラクタから例外を送出した場合、デストラクタが呼ばれないためにリソースリークにつながるというものです。これは、次のようなケースを想定しているものと思われます。 foo::foo() : a(new A), b(new B) { } 確かに、a または b のうち、後から初期化される側で例外が送出されると、他方が解放される機会が失われるため、リークにつながります。しかし、 void foo() { A* a =

    fa11enprince
    fa11enprince 2015/07/26
    とりあえずスマポはいいね
  • サービス終了のお知らせ

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

    fa11enprince
    fa11enprince 2015/07/26
    C++の厄介なところその1ですよね(;´・ω・)
  • Boost.Multi-index ランク付きインデックス - Faith and Brave - C++で遊ぼう

    Boost 1.59.0から、Boost.Multi-indexに、ranked indiciesというのが入ります。 これは、キーが何番目に大きいかを対数時間で取得できる、連想配列のインデックスです。 イメージとしては、mapに対してit = m.find(key)をして得たイテレータに、distance(m.begin(), it)としてイテレータの位置を求めるのが、容易になるという感じです。 #include <iostream> #include <boost/multi_index_container.hpp> #include <boost/multi_index/ranked_index.hpp> #include <boost/multi_index/member.hpp> struct Person { int age = 0; std::string name; Per

    Boost.Multi-index ランク付きインデックス - Faith and Brave - C++で遊ぼう
  • jpn.ph

    This domain may be for sale!

  • 座ひょーへー面

    ■ 座ひょーへー面 ■ 更新履歴 11/04/03 おすすめツール いろいろ更新 11/04/02 UQGL Beta(11/04/02) ・ ばねばねくん Beta(11/04/02) 10/10/15 UQGLをつくる > Task 加筆修正 10/10/14 UQGL 10/09/23 UQGLをつくる > Input ログ contents プロフィール  管理人の素性。 UQGL  ゲームライブラリ作ってます。 ゲーム創!  C(++) & Win32API。 3D描!  ベクトルの勉強。 ダウンロード  主にゲーム。 おすすめツール  厳選して紹介。 掲示板  兼メモ帳。 リンク集  厳選して紹介。 ぎゃらり~  趣味。絵と音。 RSS 日記ログ 11/06/14(TUE) ■そういえば、千鳥が好きです。…あんまり周りには伝わらないんですけど。

  • Effective Modern C++ メモ - Qiita

    自分にとっての要点メモ。 Effective C++の著者のScott MeyersによるC++11/14の定番(らしい) ※知らずに買ったら英語だったので、なんとか通読しましたが理解は随所怪しいと思われます。誤りは是非ご指摘ください。 2015/11/02追記: 日語版が出ています。稿は日語訳が出る前に書いたのなので目次の訳は一致しません。ご注意ください。 https://www.oreilly.co.jp/books/9784873117362/ 第1章: 型推論 autoやdecltypeによる型推論はコードの冗長性を減らす強力な機構だが、型推論の動きをしっかり理解していないとmodern C++での効率的なプログラミングはほぼ不可能。 1: テンプレート型推論を理解しろ 関数テンプレートtemplate<typename T> void f(ParamType param)

    Effective Modern C++ メモ - Qiita
  • [Tips]イミディエイトウィンドウを表示する方法

    なんだろう、イミディエイトウィンドウって結構使ってる人は使いまくってますね。 それなのに、なんだか探しにくい・・・ ということで、いろんな方法をまとめてみました。 方法1:ショートカット Cntl +G ただし、ソリューションを開いている状態。つまり、デバッグメニューがある状態でないと このショートカットが有効にならない。 方法2:メニュー 開発環境によってかわってきますが・・・ とりあえず、Visial Basic 2008 Express Edition の例 [デバッグ]→[ウィンドウ]→[イミディエイト] 方法3:かわりだね (1)   Visual Studio を起動し、おもむろに、Cntl + / (2)   検索ウインドウで、 > と打って、コマンドモードにして、 immed と打つと・・・ なんだかんだで、めでたしめでたし けっこういろいろできますね・・・

    fa11enprince
    fa11enprince 2015/07/04
    イミディエイトウィンドウ
  • Debug logging with STL stream operators

    An easy to use debug logger, implemented via a custom stream buffer. Download demo - 14.9 KBDownload source - 3.54 KB Introduction There are so many different ways to output debug log messages in a C++ program. Some use printf, others std::cout or std::cerr. On Windows, one can send strings to the debugger by calling the OutputDebugString API function, or by using TRACE macros from the MFC library

    fa11enprince
    fa11enprince 2015/07/04
    OutputDebugString
  • How to redirect standard output to output window from Visual Studio

    From Redirecting cerr and clog to OutputDebugString(): #include <ostream> #include <Windows.h> /// \brief This class is derives from basic_stringbuf which will output /// all the written data using the OutputDebugString function template<typename TChar, typename TTraits = std::char_traits<TChar>> class OutputDebugStringBuf : public std::basic_stringbuf<TChar,TTraits> { public: explicit OutputDebug

    How to redirect standard output to output window from Visual Studio
    fa11enprince
    fa11enprince 2015/07/04
    OutputDebugString
  • More C++ Idioms/内部クラス(Inner Class) - Wikibooks

    [編集] 意図[編集] 多重継承なしに複数のインタフェースを実装し、さらに自然に見えるアップキャストを提供する。 単一の抽象化で同一インタフェースに対する複数の実装を提供する。 別名[編集] 動機[編集] 2つの独立したクラスライブラリによって提供される、 2つの独立したインタフェース中の仮想関数のシグネチャが 衝突する可能性がある。 特に、単一のクラスにおいてその衝突した関数を、 対象とするインタフェース毎に異なる方法で実装する必要がある場合、問題になる。 例えば、 class Base1 /// Moon によって提供 { public: virtual int open (int) = 0; /* virtual */ ~Base1() {} // 多態的な delete が禁止されている }; class Base2 /// Jupitor によって提供 { public: vir

  • Set / Get とプロパティ

    概要 「プロパティ」で説明しているように、 C# にはプロパティという便利な機能が備わっています。 ここでは、その C# が出てくる以前、 C++ ではどうやって実装の隠蔽をしていたかについて説明したいと思います。 (ちょっと記憶があいまいだけど、 確か Effective C++ か More Effective C++ 辺りで読んだ話。) 「C# によるプログラミング入門」では、 名前をあらわす name と、 年齢をあらわす age をメンバーとして持つクラス Person を使って説明をしましたので、 ここでも Person クラスの age を例として説明します。 一番簡単なのは、public にしたいメンバー変数の数だけ、 Set変数名 / Get変数名 という名前のメンバー関数を用意する方法。 age なら、SetAge と GetAge というのを Person クラス内に

    Set / Get とプロパティ
  • ループを使わないFizzBuzz問題の解き方 - 何か着ていればいいよ

    プログラマの登竜門FizzBuzz問題について。 ループを使わない解き方を書いてみた。 通常、この手のループを使わない系は関数の再帰呼び出しで解くのだけど そこをもう一捻りしてコンパイル時に全てのループが展開されている方法をやってみた。 つまり、C++のテンプレートメタプログラミングでコンパイル時にテンプレートが展開されているってやつ。 どうやらC++のテンプレートメタプログラミングはチューリング完全だそうで、 噂には聞いていたのだけど、実際どんなもんなのか自分の手を動かして確かめてみた。 gist.github.com 一年に一度くらいしか書かないC++でなんか怪しい感じだけど動くは動く。*1 ループの進め方とか色々もっとスマートに出来ないのかな?とも思うけど現状はこんな所で。 *1:Mac OSXのLLVM 6.1.0で動作確認

    ループを使わないFizzBuzz問題の解き方 - 何か着ていればいいよ
    fa11enprince
    fa11enprince 2015/06/26
    TMPでした( ´ ▽ ` )ノ
  • doubleの==比較は思ったとおりにならない時ある - shikaku's blog

    浮動小数点の比較の際の注意(訂正版) ※ 補足資料の最初の版で、浮動小数点の絶対値を計算する関数を abs としていま したが、fabs の誤りでした。 C 言語で浮動小数点を使った数同士の比較を行うとき、整数の比較と同じ感覚で次のよ うに書いたプログラムがよく見られます。 double D; // D に関する面積や導関数などの計算 if(D == 0){ // なにか処理 }このように浮動小数点同士の比較を==で行うことはあまりお勧めできません。演習が 提供している C 言語の資料にもこのようなプログラム例があります*1が、これは解説の便 宜のためであって当はあまりよくありません。 C 言語で浮動小数点同士の比較を行うときは、==を使わずに次のようにするべきです。 #include <math.h> // ヘッダファイル math.h から絶対値を求める関数 fabs() の定義を

    doubleの==比較は思ったとおりにならない時ある - shikaku's blog
    fa11enprince
    fa11enprince 2015/06/26
    浮動小数点数 比較
  • deque

    deque とは dequeとはDouble Ended Queue、つまり両端キューのことです。 ちなみに、queue(待ち行列、キュー)に格納された要素の取り出しのことをdequeue(デキュー)といいます。 非常に紛らわしいネーミングですが、別物です。気をつけましょう。 話を元に戻して、両端キューというものが何かというと、 先頭に要素を挿入する 先頭の要素を削除する 末尾に要素を挿入する 末尾の要素を削除する という4つの操作が許されるデータ構造のことで、dequeはこれらの操作を O(1) で行うことができます。 dequeは内部的にはリングバッファというデータ構造になっています。 リングバッファとは配列の先頭と末尾をつないで環状にしたものだと思ってください。 リングバッファの実装には配列を用います。 普通、配列の末尾(rear)に要素を加えるとき、 int array[SIZE]

    deque
  • 第四回-04 : 演算子のオーバーロード ([] と + )

    ページでは「演算子のオーバーロード」について解説する。 前のページでは代入演算子 (=) のオーバーロードを行ったが、ここでは [] 演算子と + 演算子である。 array クラスの記述 ([] 演算子のオーバーロード例) ここでは array クラスについて解説し、その過程で [] 演算子のオーバーロードについて学ぶ。 まず、array クラスの意義から解説してゆこう。以下のコード (の断片) を見てみよう。 見ての通り、要素数 10 の配列 x を定義し、その配列の 100 番目 (配列は 0 から使うので正確には 101 番目) に 1 という値を書きこんでいる。 あきらかに問題のあるプログラムだが、C/C++ では配列の境界チェックを行わないのでこのプログラムは文法上は何の問題もない。 とはいえ、(当然だが) このように境界を超えて配列の読み書きをすることは時として深刻なエラー

    第四回-04 : 演算子のオーバーロード ([] と + )
    fa11enprince
    fa11enprince 2015/06/23
    基本おさらい
  • C++で後置インクリメントよりも前置インクリメントが多用される理由 - 考える人、コードを書く人

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

    C++で後置インクリメントよりも前置インクリメントが多用される理由 - 考える人、コードを書く人
    fa11enprince
    fa11enprince 2015/06/21
    これはすごくわかりやすい解説
  • Windows C++ programming - source code - program examples - tutorials - Win32 API - GUI

    C++ compiler, tutorials, source code, explanation of C++ syntax and semantics.Everything here is about C++ programming in Windows. Why to program? Professional programmers do it to make a living. Just users just want to be advanced users. And an advanced user is the one who can program. It's possible to find free or buy ready programs which can do whatever we want. But not everything and as a rule

    Windows C++ programming - source code - program examples - tutorials - Win32 API - GUI
  • std::random_shuffle, std::shuffle - cppreference.com

  • C++ 双方向リストクラス std::list 入門

    双方向リストクラス std::list とは std::list とは C++ で標準に使用できる便利な双方向リストクラスでござるぞ。 「双方向リスト」とは、要素を格納するノードが前後のノードへのポインタを持ち、どの位置への挿入・削除でも O(1) と高速に処理できるコンテナクラスだぞ。 ※ 「コンテナクラス」とは、単一タイプ・データ構造の複数のデータを取り扱うためのクラスのことだぞ std::list と対比されるのは std::vector である。 vector は末尾への挿入・削除は O(1) と高速だが、それ以外の位置への挿入・削除は O(N) で、データ数に比例した処理時間を要してしまう。 その半面、どの位置のデータへも O(1) と高速にアクセス(参照・代入)することができる。 任意の位置へのアクセスをランダム・アクセスと呼ぶので、vector はランダム・アクセスが O(1

    C++ 双方向リストクラス std::list 入門
  • introdunction to SIMD programming - primitive: blog

    Unite 2015 Tokyo の講演で詳細を話せなかったのが心残りだったので、大量のオブジェクトの更新処理についてこの場で書いてみます。 主に C++ で、簡単なパーティクルエンジンを作り、それを SIMD を用いて高速化する手順を解説します。 話を簡単にするため、以下の前提を設けます。 ・x86 環境のみ考慮 ・パーティクルは位置と速度のみを保持 ・パーティクル同士の相互衝突は総当たりで計算 総当たりなので超遅いですが、実装は容易で SIMD による恩恵を受けやすく、題材として手頃です。 この記事の中で引用されているソースの元は こちら、ビルド結果 (上のスクリーンショットのデモプログラム) は こちら になります。 相互衝突するパーティクルを実装する場合、お互いの距離を計算し、当たっていたらめり込み具合に応じて押し返す、というのがよくある実装だと思います。まずはそれをストレートに

    introdunction to SIMD programming - primitive: blog