タグ

C++に関するvoidy21のブックマーク (147)

  • array の初期化 - melpon日記 - HaskellもC++もまともに扱えないへたれのページ

    昔、ネストした配列が初期化できなくて array を使うのを諦めたのですが、 http://d.hatena.ne.jp/nagoya313/20100401/1270137582 を読んで、もしかしていけるんじゃないかと試してみました。 昔は // これは OK const int ar1[3][2] = { { 1, 2 }, { 3, 4 }, { 5, 6 }, }; // これは NG const std::array<std::array<int, 2>, 3> ar2 = { { 1, 2 }, { 3, 4 }, { 5, 6 }, }; これがダメだったので諦めていたのですが、上記のを参考にして、 const std::array<std::array<int, 2>, 3> ar = { { { 1, 2 }, { 3, 4 }, { 5, 6 }, }, }; こうす

    array の初期化 - melpon日記 - HaskellもC++もまともに扱えないへたれのページ
    voidy21
    voidy21 2010/04/11
  • 配列コピー時に犯しやすい誤りに注意する ――C/C++セキュアコーディング入門(6)

    データをコピーする先の記憶領域として十分なサイズが確保されていないと、バッファオーバーフローに繋がります。例えば、コピー先の領域として確保するサイズが不十分だったり、コピー先の領域は意図どおり確保していても、コピーするデータのサイズを誤って指定してしまう場合などです。 典型的な誤りとしては、文字列コピーにおけるNULL終端バイト分のサイズの配慮し忘れがあります(関連ルール「STR31-C. 文字データとNULL終端文字を格納するために十分なサイズの領域を確保する」を参照)。 また、コピーサイズを計算する際に整数オーバーフローが発生したり、正の値を処理することを想定しているロジックに負の値を持った符号付き整数を渡すことで、暗黙の変換により大きな正の値として扱われて問題を起こすケースもあります(関連ルール「STR31-C. 文字データとNULL終端文字を格納するために十分なサイズの領域を確保す

    配列コピー時に犯しやすい誤りに注意する ――C/C++セキュアコーディング入門(6)
    voidy21
    voidy21 2010/04/11
  • C++で読むデザインパターン(Design Patterns read by C++)

    voidy21
    voidy21 2010/04/10
  • LLVMのC/C++コンパイルエラーメッセージはわかりやすい | エンタープライズ | マイコミジャーナル

    LLVM is a robust system, particularly well suited for developing new mid-level language-independent analyses and optimizations. CやC++でアプリケーションを開発する場合、またはC/C++で開発されたオープンソースソフトウェアをコンパイルする場合に遭遇するコンパイルエラーや出力されるエラーメッセージは、C/C++に精通していなければ原因を予測しにくいことが多く、C/C++初心者を萎縮させる原因のひとつになっている。移植する段階でインクルードが必要になったとか、typedefを追加するといった簡単な対処でコンパイルできるものが、エラーメッセージの内容が理解できないために解決できないということはままある。 LLVM Project Blog: Amazing feat

    voidy21
    voidy21 2010/04/10
  • Spaghetti Source - 各種アルゴリズムの C++ による実装

    ACM/ICPC(プログラミングコンテスト)系列の問題を解くことを目標にして,各種アルゴリズムを C++ で実装してみた.極めて意地が悪い類の問題には対応していないし,特定の入力に対して高速に動くということもない.計算量も最良とは限らない. これらを参考にする方への注意とお願い: これらの記述は正確とは限りません.参考文献を参照することを強く推奨します.間違っている場合は是非教えてください. これらのプログラムは間違っているかもしれません.各人で検証することを強く推奨します.バグがあれば是非教えてください. 分類が怪しいので,これはこっちだろう,ということがあればコメントを下さると助かります. 注意! 現在書き換え中 TODO 分類を正しく行う. 全体的に説明と使い方を詳しく. Verify していないものを Verify. ボロノイ図(いつになることやら……) 基 テンプレート グラフ

    voidy21
    voidy21 2010/03/27
  • 本の虫: なぜC++0xの正規表現は、ECMAScript準拠なのか

    Boostの正規表現ライブラリで使われている正規表現の文法は、Perl 5を参考としている。一方、C++0xに入る、正規表現の標準ライブラリは、ECMAScript準拠(プラスちいさな拡張機能)である。 オプションで、POSIXのbasic、またはexntended、それに加えて、grepの拡張機能に準拠した文法を使うこともできるが、POSIX規格は、常にLeftmost Longest ruleであり、Non greedy repeatsができないので、grepのようなツールならともかく、プログラミング言語の中で使う正規表現としては、貧弱である。 しかし、TR1は、Boostを参考に作られたはずである。なぜ、違うのか。 Perlの正規表現は、Javascriptプログラマから見ると、少々羨ましい機能がある。特に、independent sub-expressions, zero widt

  • C++0x 規格書日本語訳 - KBDAHOLIC - やぬすさんとこ

    今なら C++98 読むよりゃ draft だけど C++0x の規格書読んだ方がいいだろうってことでカホカホ打っている感じ。 http://github.com/januswel/Cxx0xISja 完了してるところが偏りまくってるんだけど C++ の規格書を読む上で必要な語句が定義されているところを重点的に、あとおれの興味のあるところをいくつかという感じで。てかこの規格書語調が安定してなかったり語句定義がまとまってなかったり ( ごく一部でしか使われない語句はそこで定義してるとか書いてあるけど条項を越えて使われてる語句がかなり多い ) 非常に読みにくい。国際標準の文書ってのはこういうもんなのかと思いつついやでも W3C の出してる recommendation は普通に読めたしな…とか英語力の問題かと思いつついやでも RFC は普通に読めたしな…とかまぁそんな感じで。 自分で規格書を読

    C++0x 規格書日本語訳 - KBDAHOLIC - やぬすさんとこ
    voidy21
    voidy21 2010/03/15
  • autoの意外な使い方

    江添亮 自由ソフトウェア主義者 C++ Evangelist C++標準化委員会の委員 ドワンゴ社員 C++11を執筆した。 株式会社ドワンゴで働いている。 Mail:boostcpp@gmail.com Twitter:@EzoeRyou GitHub: https://github.com/EzoeRyou 江添亮のマストドン@EzoeRyou 筆者にブログのネタを提供するために、品物をアマゾンお気に入りリスト経由で送りたい場合: Amazon.co.jp: 江添亮: 江添のほしい物リスト 筆者にブログのネタを提供するために、直接に品物を送りたい場合、住所をメールで質問してください。 View my complete profile ► 2020 (31) ► December (2) ► November (2) ► September (2) ► August (4) ► Jul

    voidy21
    voidy21 2010/03/11
  • C++ で気軽に時間測定がしたい - iwiwiの日記

    プログラムの一部分の所要時間をちょっと調べたいと思っても,前で時間を調べて,後ろで時間を調べて,引き算したものを出力して,と色々書かねばならず,意外と面倒です. Ruby の benchmark はいいなあと思っていたら,id:tanakh さんの PFI セミナーを思い出したので,それっぽいものを C++ で実現してみました. (2/21 19:30 頃に「もう少し便利に」のバージョンの問題点と解決について追記しました) 例 int main() { benchmark { sleep(1); } benchmark { sleep(2); } } こんな感じで書くと 1.000013 sec 2.000009 sec こんな感じで標準エラー出力に表示. ソースコード これを上に書いておけば OK です. #include <sys/time.h> struct __bench__ {

    C++ で気軽に時間測定がしたい - iwiwiの日記
    voidy21
    voidy21 2010/02/21
  • クラス設計メモ - Cube Lilac

    機能をどうクラスに分けるかについて,C++ を触りだした頃からの意識の変遷のメモ.特に何かの根拠があると言う訳ではなく,私が(特に C++ を触りだした初期の頃に)感じていた事です. 「ある機能を実現する際に何個のクラスを出現させても良いか(使用者に記述を強いても良いか)」と言う事をしばしば考えます.HTTP を例にとって考えてみます. std::string host("www.example.com"); std::string path("/"); int port = 80; clx::http session(host, port); session.get(path); std::cout << session.body() << std::endl; これは,CLX C++ Libraries - http のサンプルコードなのですが,HTTP でのやり取りと取得したデータの

    クラス設計メモ - Cube Lilac
  • C++0x基礎文法最速マスター - Faith and Brave - C++で遊ぼう

    C++0xになると、C++03でごちゃごちゃした部分がだいぶ すっきり書けるようになるので、C++0xでの入門はこんな感じになるよー、 という気持ちで書きました。 1. Hello World C++0xでの入出力には、IOStreamというものを使用します。 <<演算子でどんどんつないでいきます。 以下のプログラムの読み方は 「標準出力(cout)に"Hello World"という文字列と、改行(endl)を出力する」 です。 #include <iostream> int main() { std::cout << "Hello World" << std::endl; return 0; } Hello World coutとendlを使用するには、 #include <iostream> のように、という標準ライブラリのファイルを読み込む必要があります。 2. コメント 行コメント

    C++0x基礎文法最速マスター - Faith and Brave - C++で遊ぼう
    voidy21
    voidy21 2010/02/02
  • C++/CLI: とある文字列の相互変換(コンバージョン)

    CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

    C++/CLI: とある文字列の相互変換(コンバージョン)
    voidy21
    voidy21 2010/01/27
  • それ、C++0xでできるよ!

    コンセプトなしでテンプラ引数が、特定のメンバ関数を持ってるか調べられるの? SFINAEでできるよ! // Overload Resolutionと併用する場合。 class has_xxx { typedef char yes_type ; typedef struct { char c[8]; } no_type ; // Unified Function Syntaxが入れば、autoではなく[]になる。 template< typename U > static auto check( void ) -> decltype( std::value<U>.xxx(), yes_type); template< typename U > static no_type check( void ) ; public: static bool const value = std::is_sa

    voidy21
    voidy21 2010/01/25
  • C++0xの字句について

    以下のコードは、完全にwell-formedなC++0xのコードである。 // 変数(U+5909, U+6570) int \u5909\u6570 = 0 ; C++0xでは、universal-character-nameが追加されている。Unicodeのコードポイントを、直接記述できるのだ。これは、なんと識別子にも使える。したがって、上記のコードは、well-formedなC++0xのコードであり、いやしくもC++0x完全準拠を謳うコンパイラならば、必ずコンパイルが通るべきコードである。 また、以下のコードはimplementation-dependantである。 int 変数 = 0 ; ただし、ill-formedとは規定されていない。また、実装がこのような実装依存の文字をサポートしている場合の挙動が規定されている。したがって、実装によっては、このコードは通る。 もちろん、これ

    voidy21
    voidy21 2010/01/25
  • 安全なシグナルハンドラを実装するには ――C/C++セキュアコーディング入門(4)

    UNIXなどPOSIX準拠のOSでは、割り込みや例外を抽象化した「シグナル」と呼ばれる仕組みを用いてプロセスに(非)同期イベントが通知されますが、シグナルハンドラで行える処理には制約があり、これを無視したコードを書くと脆弱性につながる恐れがあります。今回はシグナルハンドラの制約に関するルールを見てみましょう。 シグナルハンドラの制約 UNIXなどPOSIX準拠のOSでは、割り込みや例外を抽象化した「シグナル」と呼ばれる仕組みを用いてプロセスに(非)同期イベントが通知されます。ユーザが[Ctrl]-[C]キーを押してプログラムを中断しようとしたり(SIGINT)、整数オーバーフローが発生したり(SIGFPE)すると、それらのイベントに対応するシグナルがカーネルからプロセスに対して通知されるのです。プログラマは、これらのシグナルを受信した時に特定の動作を行わせる「シグナルハンドラ」を書くことが

    安全なシグナルハンドラを実装するには ――C/C++セキュアコーディング入門(4)
  • プログラマのためのGoogleプロジェクト35、+23、+34 | エンタープライズ | マイコミジャーナル

    Blog of 0x1fff 0x1fff: 35 Google open-source projects that you probably don't knowにおいてGoogle Codeでホスティングされているプロジェクトから35のプロジェクトが紹介されている。もとはポーランド語で記載された0x1fff: 34 projekty Open Source udost?pnione przez Googleを英訳したものとあるが、翻訳する段階で1つプロジェクトが追加されて35になっている。その後さらに25のプロジェクトが、その後さらに34のプロジェクトが追加され、合計92のプロジェクトがまとめられている。マイコミジャーナルでニュースやハウツーとして取り上げたものも多い。取り上げられているプロジェクトは次のとおり。 テキストファイル処理 Google CRUSH (Custom Repo

  • C++プログラマのレベル10

    レベル0 C++とかいう、Cにヘンテコな機能を付け加えた言語があることはしっているが、ワケ分からんので勉強する気にならない。 Cの何が不足なのか分からない。 C++についてググったり、入門書を読んだりしてみる。文法はCに後から無理やり付け加えた感じだ。 でも文法がわかりにくすぎる。 レベル2 vectorとか便利すぎて涙がでる。もういちいちrealloc()を呼び出さなくてもいいんだ。でもイテレーターとかいうのが、ワケ分からんので、ポインタを使っている。 構造体の中に関数を書けるのは便利かもしれない。すくなくとも、わざわざ構造体のポインタを引数に渡さなくてもいいわけだ。 レベル3 テンプレートが分からなくて挫折中。テンプレートがわかれば、STLがもっと分かるようになる気がする。でも、いい参考書が見つからない。 継承とか仮想関数も便利だと気がつく。namespaceも地味に便利だ。 レベル4

  • dlmallocはC++があったから生まれたといっても過言ではないのだ - 神様なんて信じない僕らのために

    なんだってー!!!!(;゚д゚) (゚д゚;(゚д゚;) いや、過言かもしれませんが、C++の存在がdlmallocを書く切っ掛けになったのは確かです。 dlmallocは現在はLinuxなどのデフォルトのmalloc実装ではありませんが、 dlmallocは当に優れたアルゴリズムを持っています。 まずは「はじめに」の日語訳を引用として載せておきます。(この記事自体は非常に古いもので現在のmallocの実装の詳細を反映してはいませんが、今なお使うに値するアロケータだと俺は信じますし、使っています) http://g.oswego.edu/dl/html/malloc.html はじめに メモリアロケータはソフトウェア工学のインフラにおける興味深いケーススタディを形成します。 私はそれを1987年に書き始めて以来、維持と発展に努めてきました。(これは多くのボランティアの方々の助けがあって

    dlmallocはC++があったから生まれたといっても過言ではないのだ - 神様なんて信じない僕らのために
    voidy21
    voidy21 2009/12/22
  • C++: 構造体を格納したSTLコンテナに対してソート・探索・削除などのアルゴリズムを適用する

    C++に慣れている人にとっては当たり前のことかもしれないけど、あまりC++に親しんでいない場合、構造体を格納したSTLコンテナに対してアルゴリズム<algorithm>を有効に活用していないかもしれない。そこで、構造体を格納したvectorなどのSTLコンテナでソートや探索、削除などのアルゴリズムの利用方法を書いておく。 struct A { int n; int* p; }; 上記のような構造体はよく見かける形だと思う。構造体Aに整数型変数のnとポインタ型変数のpがあり、例えばnに配列の要素数、pにその配列を確保したりする。こういった構造体を以下のようにvectorなどのSTLコンテナを使って格納することは多々ある。 vector<A> A_list; これで構造体Aをコンテナに格納できるわけだ。ところで、STLコンテナを使用する一つの理由として便利なアルゴリズムが利用できることが挙げら

    voidy21
    voidy21 2009/12/16
  • 本の虫: シンタックスシュガーとしてのlambdaの解説

    の虫: lambda 完全解説で、lambdaの全機能は、ほぼ網羅したと思う。lambdaの文法は、それほど難しくはないと思うのだが、難しいと感じる人がいるらしい。とくに、キャプチャが理解できない人がいるそうだ。そこで今回は、lambdaの根を解説してみようと思う。 lambdaというのは、そもそも関数オブジェクトのシンタックスシュガーなのである。例えば、 namespace hito { template< class InputIterator, class Function > Function for_each( InputIterator first, InputIterator last, Function f ) { for ( ; first != last ; ++first ) f( *first ) ; return f ; } } int main() { st

    voidy21
    voidy21 2009/12/15