タグ

C++に関するiwadonのブックマーク (295)

  • コンパイル時に文字列リテラルに指定のアルゴリズムによる計算を施し、整数に変換するには? - memologue

    頭の体操です。 int main(void) { return CompileTimeHash("abcdefghijklmnopqrstu"); }が、 mov $12345, %eax のような形にコンパイルされればOKとします(最適化をかけて即値になればOK)。テンプレートの再帰を使うことになると思いますが、再帰がunrollされただけの形は当然NG、マクロの使用もNGとします。 .....答えは! #include <cstddef> template <std::size_t N> inline int accum(const char (&str)[N]) { return str[N - 1] + accum(reinterpret_cast<const char (&)[N-1]>(str)); } template<> inline int accum<1>(const

    コンパイル時に文字列リテラルに指定のアルゴリズムによる計算を施し、整数に変換するには? - memologue
  • StringPiece というライブラリの話 - 兼雑記

    例えばこう、ディレクトリの名前とその中のファイル名を / でくぎって結合する関数を書くとします。引数が std::string でも使いたいし const char* でも使いたい、ということで、たいていは void JoinFilePathStr(const string& dir, const string& base, string* out) { out->clear(); out->append(dir); out->push_back('/'); out->append(base); }なんてのを書くんじゃないかと思います。この関数で問題になるのは const char* を渡すと不要な string object が一度できることで、敬虔な C++ 屋さんだと、 void JoinFilePathStr(const string& dir, const char* base,

    StringPiece というライブラリの話 - 兼雑記
  • C++で例外を使ったプログラムをうまく書くにはどうすればいいのか - 射撃しつつ前転 改

    C++とはできるだけ離れた人生を送りたいと願ってきた。しかし、なかなかそうもいかず、最近はだんだんとC++の知識を学びつつある。今更C++を勉強するなんてちょっと出遅れすぎてるんじゃないかという気もするが、もうすぐ新規格であるC++0xもリリースされるはずであるし、意外とC++を学ぶにはいいタイミングかもしれない。 プログラムの品質はエラー処理をどこまで丁寧に書くかで決まる。エラー処理の書き方には、 エラーコードを返す(エラーコードを返せるように設計しておく) エラー時に例外を投げる の2種類があるが、今悩んでいるのはそのC++の例外についてである。 例えば、機械学習のツールを書くことを考える。このようなツールではデータをパースする部分を書く必要が出てくるだろう。1行に1つのデータが以下のような形式で書かれているものをパースしたい。 1 2:1 4:2 5:1 このデータをパースするコード

    C++で例外を使ったプログラムをうまく書くにはどうすればいいのか - 射撃しつつ前転 改
  • C++で例外を使ったプログラムをうまく書くにはどうすればいいのか(2) - 射撃しつつ前転 改

    こないだの記事はアクセス数の割に意外とたくさんコメントや反応を頂いたのだけれど、いろいろ考え始めると、なかなかコメントが返せなかった。 で、私はtry-catchを書くとそのブロックが呼び出される際に微妙にオーバーヘッドがかかるものだとばかり思っていたのだが、今日調べ直すと、実は、try-catchをいくら書こうが、最近のg++では、例外が実際に発生しない限りはオーバーヘッドは発生しないことがわかった。なんともひどい勘違いである。これが、みなさんのコメントと自分の中の意識とのズレを生んでいた原因のような気がする。 ノーコストでtryが使えるならば、前回の記事のparse_lineであれば、最内ループのところにtry_catchを書いてしまえばいい(それはそれで見た目的にあまりよろしくない様な気もするが、まぁそこら辺は表記の好みの問題であって、パフォーマンスの問題ではない)ので、葛藤する必要

    C++で例外を使ったプログラムをうまく書くにはどうすればいいのか(2) - 射撃しつつ前転 改
  • 面白かったので怖い話の反応に反応してみる - 神様なんて信じない僕らのために

    id:Dr_Caligariさんから面白い反応があったので、 俺も思ったことに対してつらつら反応してみます。 普通にコメントしようと思ったのですが長くなったのでTB返しで。 私が書くのはゲーム業界のプログラマーという狭い世界で生きている人間が思った事 ということで、俺もゲーム業界の片隅で生きていた事はあるのでその観点で反応してみます。 ディレクトリ構成が機能単位でなくプログラマの名前幽霊 これ実際に見たことあります。 アセンブラを使っていて、プロジェクトの規模が小さかった時代の名残らしいです。 恐らく俺が見たプロジェクトもアセンブリの頃の名残でした。 プロジェクト管理とかソース管理という構成管理の概念がなかったころなら、 別に良いとは思うのですが、今でもこれを引き継いでいてこれを「気で」良いと思っている人がいることが恐ろしくもあります。 バージョン管理システムを使わない幽霊 そろそろ分散

    面白かったので怖い話の反応に反応してみる - 神様なんて信じない僕らのために
  • C++の話(本当にあった怖い話)に反応してみる - Dr_Caligariの日記

    http://d.hatena.ne.jp/Isoparametric/20100712/1278898618 id:Isoparametricさんが面白いスライドを投稿されていたので、思ったことをつらつらと書いてみたいと思います。 思った事を書いているだけなので、C++のdisを反論しているわけではありません。 私が書くのはゲーム業界のプログラマーという狭い世界で生きている人間が思った事なので、一般的なC++と思わないでください。 ディレクトリ構成が機能単位でなくプログラマの名前幽霊 これ実際に見たことあります。 アセンブラを使っていて、プロジェクトの規模が小さかった時代の名残らしいです。 その頃は、この辺りを気をつけなくてもプロジェクトのソース全体が見通せるので、あまり問題にならなかったみたいですね。 私が見たのは15年くらい昔のプロジェクトのソースなんで、さすがに今はこんな事してるプ

    C++の話(本当にあった怖い話)に反応してみる - Dr_Caligariの日記
  • Python Hack-a-thon 2010.07で「本当にあった怖い話」をしてきました - 神様なんて信じない僕らのために

    土曜日のPython Hack-a-thon 2010.07で「当にあった怖い話」をしてきました。 会場を提供してくださったオラクルさん、 そして、スタッフの皆さん、色々準備ありがとうございました。 また、参加者の皆さんお疲れ様でした! (レポートは別途書きます) で、俺のプレゼンは完全にネタなので、ご了承ください。(特にC++erの皆さん) 前半は前振りなので、あまり気にしないでください。 プレゼン中で某C++な人達の写真や、Twitter発言が引用してありますが、 もし問題があればお知らせください。 「ソースを読もう」とか意味ないですので飛ばすの推奨。 また、なんか話したいなあ。 C++の話(当にあった怖い話)View more presentations from Isoparametric . あと、プレゼン中で「C++の設計と進化」を勧めていますが、 C++のことわからないと

    Python Hack-a-thon 2010.07で「本当にあった怖い話」をしてきました - 神様なんて信じない僕らのために
  • C++の話(本当にあった怖い話)

    constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ

    C++の話(本当にあった怖い話)
  • [Grimoire]「プログラミングの魔導書」予約開始! - Faith and Brave - C++で遊ぼう

    2010/7/16 10:29: 大変お待たせいたしました。予約を再開しましたので、よろしくお願いします。 ============ 長らくお待たせしましたが、弊社ロングゲート刊行の 「プログラミングの魔導書」の予約を開始しました。 「プログラミングの魔導書」 - 株式会社ロングゲート 製品紹介 今回は弊社Webサイトでの専売となっております。 また、受注生産の形態をとっているため、書籍版に関しては予約でのご注文のみとなりますのでご注意ください。 PDF版は予約期間が過ぎた後でもご購入いただけます。 予約期間は2010年8月6日(金)までです。 価格: 書籍版 : 1,500円(税込・送料別) PDF版 : 1,000円(税込) 書籍+PDFセット : 2,000円(税込・送料別) 商品情報: ページ数 : 158 書籍版ISBN : 978-4-9905296-0-4 PDF版ISBN

    [Grimoire]「プログラミングの魔導書」予約開始! - Faith and Brave - C++で遊ぼう
  • Spaghetti Source - 各種アルゴリズムの C++ による実装

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

  • C++0xにおけるPODの定義

    C++0xのPODの定義をまとめてみた。ただし、C++0xでは、memcpyでコピーして、各データメンバーの状態が保証されるためには、、trivially copyable classであればいい。 PODは、trivial classかつstandard-layout classであること。 さらに、非PODな非staticデータメンバーを持たないこと。 trivially copyable class ユーザー定義のコピー、ムーブのコンストラクタと代入演算子がないこと。 デストラクタがtrivialであること。 trivial class trivially copyable classに加えて、コンストラクタもtrivialであること。 trivialであるということは、ユーザー定義ではないことと、delete化(C++0xの新しい機能)されていないこと。 コピー、ムーブコンストラク

    iwadon
    iwadon 2010/06/10
    コメント欄も。
  • 「プログラミングの魔導書」の情報公開 - Faith and Brave - C++で遊ぼう

    http://longgate.co.jp/products.html 弊社、株式会社ロングゲートで、プログラミング雑誌を作るというプロジェクトが進行しています。 書創刊の目的は、プログラミングの入門記事が巷に溢れる今、プログラマのさらなる成長のため情報発信を行い、業界全体の技術力を向上させることです。 雑誌といっても、記事の質を保つために不定期刊行としていることから、実際には雑誌ライクな書籍となります。 書籍名は「プログラミングの魔導書〜Programmers' Grimoire〜」です。 創刊号となる今回のテーマは、サブタイトルにも含まれている「C++」です。全ての記事がプログラミング言語C++に関するものとなっています。 Vol.1のテーマをC++としたのは奇をてらったものではありません。 C++は習得の難しい言語と言われておりますが、近年はBoost C++ Librariesに

    「プログラミングの魔導書」の情報公開 - Faith and Brave - C++で遊ぼう
    iwadon
    iwadon 2010/06/02
    欲しい。
  • 株式会社ロングゲート - 製品案内

    Information 2013/12/25 書籍『プログラミングの魔導書 Vol.3』の発売 (書籍版の予約受付は終了しました) 2013/12/03 書籍『プログラミングの魔導書 Vol.3』の予約受付開始 2011/12/01 ブログを開始 2011/11/30 著者からの指摘を受け、書籍 『プログラミングの魔導書 Vol.2』PDF版を改訂 2011/11/02 書籍 『プログラミングの魔導書 Vol.2』の壁紙公開 2011/10/05 書籍 『プログラミングの魔導書 Vol.2』を発売 (書籍版の予約受付は終了しました) 2011/9/15 書籍 『プログラミングの魔導書 Vol.2』の予約受付開始 技術トレーニングサービスを開始 2010/8/07 書籍 『プログラミングの魔導書 Vol.1』を販売開始 2010/6/01 書籍情報を公開しました 2010/2/28 今年5月

    iwadon
    iwadon 2010/06/01
    『プログラミングの魔導書』欲しい。
  • LLVM、GCC libstdc++をBSDライセンスのlibc++へ置き換え | エンタープライズ | マイコミジャーナル

    LLVM is a robust system, particularly well suited for developing new mid-level language-independent analyses and optimizations. LLVMがC++標準ライブラリとして新しくlibc++を含むようになった。LLVMはこれまでC++標準ライブラリとしてGCC/G++のlibstdc++を採用してきた。libc++はこれを置き換えることになるもので、BSDライセンスのもとで提供されている。libc++の特徴は次のとおり。 C++0Xをターゲットにして実装が進められている 高速コンパイル 高速実行 省メモリ libstdc++とのABI互換性あり 開発段階にありN3092実装の85%ほどを達成 BSDライセンスでの提供 GCC/G++ libstdc++ではなく新しくlib

  • “libc++” C++ Standard Library — libc++ documentation

    “libc++C++ Standard Library¶ Overview¶ libc++ is a new implementation of the C++ standard library, targeting C++11 and above. Features and Goals Correctness as defined by the C++11 standard. Fast execution. Minimal memory use. Fast compile times. ABI compatibility with gcc’s libstdc++ for some low-level features such as exception objects, rtti and memory allocation. Extensive unit tests. Design

  • New "libc++" C++ Standard Library

  • Clangに自前のSTLが来る

    C++11の参考書、アマゾンお気に入りリストを公開中。 アマゾンの江添のほしい物リスト C++11の参考書、C++の文法と機能をGitHubで公開中。詳しくは、の虫: C++11参考書の公開:C++11の文法と機能を参照 GitHub: EzoeRyou/cpp-book レポジトリのzipダウンロード GitHub Pageで閲覧:C++11の文法と機能 江添亮 自由ソフトウェア主義者 C++ Evangelist C++標準化委員会の委員 ドワンゴ社員 C++11を執筆した。 株式会社ドワンゴで働いている。 Mail:boostcpp@gmail.com Twitter:@EzoeRyou GitHub: https://github.com/EzoeRyou 江添亮のマストドン@EzoeRyou 筆者にブログのネタを提供するために、品物をアマゾンお気に入りリスト経由で送りたい場合

  • More C++ Idioms - Wikibooks

    C++ はあまりに『熟練者に優しく』なってしまった」(C++ has indeed become too "expert friendly") Stroustrup 氏の言は真実である。なぜなら熟練者は言語のイディオムに深く精通しているからである。プログラマが理解するイディオムの増加に従って、言語は彼あるいは彼女にとってよりフレンドリーになる。この open content book の目的はほどほどに C++ に精通しているプログラマに対して現代的な C++ のイディオムを提示し、C++ をよりずっとフレンドリーに感じるレベルにまで知識を引き上げる助けと成る事である。書は熟練した C++ プログラマが C++ を使ってプログラミングや設計を行う際に用いる事の多い再利用可能なイディオムの網羅的なカタログと成るよう意図されている。これは、それらのテクニックや語彙をひとまとめにしようという

  • scoped enumについて

    C++0xでは、scoped enumが追加されている。従来のenumは、unscoped enumと呼ばれている。いやしくもC++0xプログラマならば、scoped enumを使うべきである。 一体、従来のenumと、何が違うのか。scoped enumは、強い型付けによって、バグを防いでくれる。 使い方は、とても簡単である。 // scoped enum enum struct Hairstyle { FusaFusa, Mohawk, Hage } ; int main() { // OK Hairstyle style = Hairstyle::FusaFusa ; // Error: enum名が指定されていない。 Hairstyle head = Hage ; // Error: 暗黙の型変換はできない。 int i = Hairstyle::Hage ; // OK: 明示的

    iwadon
    iwadon 2010/03/22
    今だと enum FOO { FOO_BAR }; みたく自分で書くところを enum struct FOO { BAR }; で済むようになるってことか。沢山書くときに楽になりそう。あと、最近 enum よりも static const で書くことが多くなったので、型の指定も嬉しい。早く手
  • Paypalによる寄付の受付をはじめてみた

    追記:寄付のおかげで形になるほど執筆が続けられました。の虫: C++11参考書の公開:C++11の文法と機能 Pledgieというサービスを使い、寄付を募集してみた。 [終了] 受け付ける金額は、日円(JPY)に設定している。 Paypalの銀行口座の認証が終わったので、Paypal経由でも寄付を募ってみようと思った。Paypalの送金サービスを直接使ってもいいのだが、pledgie.comというサービスを利用することにした。 pledgie.comというのは、非営利、営利に関わらず、何らかの寄付を募集するためのWebサービスを提供しているサイトである。寄付を支払うのは、Paypal経由で行える。Paypalを直接使うのに比べて、pledgieには、いくつかの利点がある。 まず、どのような内容の寄付なのかという説明のページを作ることができる。そのページへの、分かりやすい画像のリンクをは