タグ

C++11に関するt-murachiのブックマーク (57)

  • volatileが必要な場面を見つけ出す

    1#include<signal.h> 2 3sig_atomic_t interrupted; 4 5void sigint_handler(int signum){ 6 interrupted = 1; 7} 8 9int main(){ 10 signal(SIGINT, sigint_handler); 11 while(!interrupted){ 12 [何かの処理] 13 } 14 return 0; 15} このコードは sig_atmoic_t interrupted にvolatileが付いていないので最適化するとバグります。 main()からの読み取りは、コンパイラの最適化によって削除されてしまう可能性がある。 真っ先に思ったこと:「知らねぇぇぇ・・・ & なんで??」 最適化によって削除されたり、変更されたりする変数を把握することができません。 **つまり、vola

    volatileが必要な場面を見つけ出す
    t-murachi
    t-murachi 2019/03/23
    volatile に関する議論。 yohhoy さん無双。最適化周りは頭では分かってても結構混乱するよね…(´・_・`)
  • cpprefjpのライブラリ編が完了しました - Faith and Brave - C++で遊ぼう

    cpprefjp - C++語リファレンス 以下のコミットで、正規表現ライブラリのリファレンス作成が完了しました。 basic_regex : サンプルコードを追加(fix #265) - cpprefjp/site <regex>ヘッダ - cpprefjp C++語リファレンス またこれにより、C++語リファレンスサイトcpprefjpの、ライブラリ編が完了しました。 Iostreamとロケール関係の9ヘッダがまだ残っていますが、それは追々やります。現在は、それ以外の43ヘッダ + C互換ライブラリの一部のリファレンス作成が完了し、C++14への対応も完了しています。 このサイトの現在のページ数は2,543ページと、書籍にして8冊分くらいの分量になっています。がんばりました、つかれました。 振り返り 2011年1月に作ったこのcpprefjpというサイトは、できるだけ全ての

    cpprefjpのライブラリ編が完了しました - Faith and Brave - C++で遊ぼう
    t-murachi
    t-murachi 2015/09/30
    うわあ、お疲れ様でした。結局全然手伝えんかった…。
  • VC++ 2015で作ったDLLをWindows XPで動かすと最悪死ぬ - イグトランスの頭の中

    Visual C++ 2015でコンパイルしたプログラムを試していたところ、Windows XPでプロセスが問答無用で死ぬ現象に見舞われました。いろいろ試してみた結果、およそ原因・回避方法が分かりましたので、ここに書き記します。 条件・症状 次の条件をすべて満たす場合に注意が必要です。 Visual C++ 2015でDLLをビルドする そのDLLはLoadLibraryなどで実行時に読み込まれる Windows XPで実行される このとき、次の新機能のいずれも使ってはなりません。死にます。 thread_local 関数内でのstatic変数 死ぬというのは、プロセスの強制終了のことです。 なお、関数内でのstatic変数のVC++ 2015の新機能とは、初期化処理が複数スレッド対応(コンパイラが適切に排他制御するコードを出力する)になるという、C++11仕様への対応です。参考: sta

    VC++ 2015で作ったDLLをWindows XPで動かすと最悪死ぬ - イグトランスの頭の中
    t-murachi
    t-murachi 2015/09/21
    Microsoft もサポート切ってるわけだし、むしろこれを理由に XP サポート打ち切る方向で進んでいったほうがいいんじゃないかな…(´・_・`)
  • Effective Modern C++の日本語版をいただきました! - Faith and Brave - C++で遊ぼう

    Effective Modern C++ - C++11/14プログラムを進化させる42項目 - Amazon.co.jp Effective Modern C++ - C++11/14プログラムを進化させる42項目 - オライリー・ジャパン 岡田さん、オライリー・ジャパンさん、ありがとうございます! 明日9/18(金)に発売です!

    Effective Modern C++の日本語版をいただきました! - Faith and Brave - C++で遊ぼう
    t-murachi
    t-murachi 2015/09/18
    やっべ、買わなきゃ…。
  • C++11をC++03に戻さなきゃいけなくて辛い話(書きかけ) - Qiita

    C++11使えないC++とかもはやC++使う意味がないこの世の中ですが、どうしてもC++11に対応してない酷コンパイラ様(某ふじなんとか社製)のためにC++03に戻すお仕事をしています。 あまりにも色々つらいので、つらかったことをまとめておいたら、少しでも似たような境遇の人の救いになるかなと思ってまとめてみます。 まだ作業中ですので、増えたら増えた時に書いてきます。 autoがない ひとつずつやっていけば直せるけど地味にメンドイですね。 特にイテレータまわりが大変です。std::map< std::string, std::vector< std::pair<int, double> > >::iteratorとかなんなんでしょう・・・。 ラムダ式がない なんといってもコレが一番きつかった。 C++11でこんなコードがあるとします。 #include<iostream> #include<

    C++11をC++03に戻さなきゃいけなくて辛い話(書きかけ) - Qiita
    t-murachi
    t-murachi 2014/10/03
    これはつらい(´・_・`)
  • はらぺこ日誌» ブログアーカイブ » C++11用のクラスひな形生成スクリプトを作ってみた

    C++ で開発する上で、クラスを一つ一つ実装するたびに毎回同じようなことを書かされるのは冗長なので、だいたいこんな感じになるよねという範囲のひな形を生成するスクリプトを perl で記述してみました。 cppgen.pl Getopt::Compact モジュールを使用しています。ご利用の際にはそちらも合わせてインストールしてあげてください。 ツールの特徴としては以下のとおりです。 名前空間とクラス名を指定すると、それらから類推される名前でファイル名や include guard シンボル名を設定し、ひな形を生成する。これらの指定は必須。 名前空間は 1階層にしか対応してません…。 doxygen フォーマット (javadoc 風) でコメントを付加。 -s オプションでクラスの概要 (@brief) を指定可能。省略した場合はクラス名を使用。 クラスの public 継承、仮想クラス、

    t-murachi
    t-murachi 2014/08/20
    ツール作ってみた。ビルド通らなかったらごめんちゃい^_^;
  • はらぺこ日誌» ブログアーカイブ » Observer パターンでコンソール MVC っぽいことをやってみる – C++ のための API デザイン

    ライブラリ API の設計手法を学ぼうシリーズの第2弾です。前回の記事はこちら。以下の教材を利用しています。 C++ APIデザイン さて、API のラッピングパターンについてはざっと読むだけで終了とし、今回は Observer パターンについてさらってみました。 MVC っぽいことをやってみたい。 書では、オブザーバーパターンの説明に入る前に、 MVC アーキテクチャについての説明がありました。 シンプルなアプリケーションでは、コントローラはユーザ入力に基づいてモデルへの変更に影響を与え、こうした変更をビューに通信して、UIを更新できるようにする。しかし、実際のアプリケーションでは、通常、水面下のモデルへの追加変更を反映するために、ビューも更新する必要がある。(…中略…)とはいえ、先ほど述べたように、モデルコードはビューコードを静的にバインディングして呼び出すことはできない。そこでオブ

    t-murachi
    t-murachi 2014/08/06
    なんだか大作になってしまった…。
  • はらぺこ日誌» ブログアーカイブ » shared_ptr にヒープ以外のものを掴ませたいなら何もしない Deleter も一緒に指定してあげればいい

    これまた非常に初歩的な話なのですが… STL のコンテナ (std::vector とか) には基的にオブジェクトへの参照を掴ませることはできない (領域確保の効率の問題とかでデフォルトコンストラクタが必須だから)。 かといって、ナマポを掴ませるのは色々と危険 (意図せず寿命が切れて無効なポインタ掴まされた状態になったりとか)。 そも non-copyable なオブジェクトを扱いたかったりと言った理由で値そのものを掴ませるのは却下したい (まぁ、いろいろあるんだよ…)。 となると std::shared_ptr を噛ますのが順当かと思いきや… 必ずしもヒープに確保した (つまり、 new した) インスタンスだけを扱うとは限らないかもしれない。十分に寿命が長いことがわかっている自動変数やメンバ変数として確保したインスタンスのポインタをこのコンテナに突っ込んであげたい場合もあるかもしれな

    t-murachi
    t-murachi 2014/07/27
    また超初歩的なネタですが…
  • はらぺこ日誌» ブログアーカイブ » C++: lambda の参照キャプチャは const 性を損なわない?

    C++ の勉強ということでちょいちょいスモールケースを書いては意味もなく github に commit するということをやっているのですが… samples-for-blog/c++/minimal-cases/value-modifier-lambda at master · murachi/samples-for-blog んー、何でしょうねこの雑なコード(^_^;A これ自体は確か、ステータスの変化を検知してステータスの種類にかかわらず共通の処理を自動で走らせるようにしたいんだけど、そうするとあれとこれとそれを変更しようとした時にあれを変更した時にもこれを変更した時にもそれを変更した時にも処理が重複して走っちゃうから無駄だよねってケースを想定して、じゃあ今あるステータスを全部一時的な構造体に突っ込んだものを引数にとってその構造体に変更を加えて返すコールバックを引数に取るようにすれば

    t-murachi
    t-murachi 2014/07/25
    もうあんまり仕事に集中できないんでブログ書いた('A`)
  • Effective Modern C++のドラフト版がリリースされた - Faith and Brave - C++で遊ぼう

    Effective Modern C++ - O'Reilly Effective Modern C++ - Safari Books Online 書籍『Effective C++』のC++11/14対応である『Effective Modern C++』のドラフト版がリリースされました。価格は$43です。 このバージョンは、完成版ではなく、レビュー中のものになります。正式版のリリースは、10月に予定されています。 正式リリース時には、書籍はフルカラーになる予定だそうです。 追記 2014/07/14 17:37 O'ReillyのEarly Releaseで購入した場合、更新がある度にそれを受け取れて、完成版ももらえるそうです。 参照 Draft Version of Effective Modern C++ Now Available C++神Scott Meyersの「Effecti

    Effective Modern C++のドラフト版がリリースされた - Faith and Brave - C++で遊ぼう
    t-murachi
    t-murachi 2014/07/16
    手元の Effective C++ 第3版 (邦訳) を見たら 3.8KJPY だった… $43 かぁ… (どけち
  • std::strftime - cppreference.com

    t-murachi
    t-murachi 2014/06/29
    知らんかった… C++11 でこんなところにまで手が入ってたのね。
  • Effective Modern C++の状況 - Faith and Brave - C++で遊ぼう

    Effective Modern C++ Status Report まず、C++11/14対応のEffective C++は、『Effective Modern C++』という名前になる予定です(略称は「EMC++」)。 現在、1回目のテクニカルレビューに入ったところで、発売は10月ころになるそうです。出版社はAddison-WesleyではなくO'Reillyです。 7月の第2週には、O'Reillyにリリースページができるそうです。

    Effective Modern C++の状況 - Faith and Brave - C++で遊ぼう
    t-murachi
    t-murachi 2014/06/29
    O'Reilly ですか。へぇぇ…
  • はらぺこ日誌» ブログアーカイブ » Pimpl とかファクトリとか – C++ のための API デザイン

    otoco プロジェクトの開発に着手するにあたって、私はまだ C++ でのライブラリ開発を 1 からコーディネートした経験がなかったので、クロスプラットフォームに対応したライブラリ API の開発手法を学ぶ必要があると感じました。ちょうどいい感じの教材が割りと最近出ていたようで、早速購入し、勉強を進めています。 C++ APIデザイン C++11 についても若干触れられているようで (原著執筆当時はまだ C++0x と呼ばれていた模様…)、この手の教材の中では比較的情報が新しい方なんではないかと思われます。 実はこのを買って勉強し始めたのはもう結構前 (確か前原にいた頃… 昨年の暮れ頃?) なのですが、ここしばらく業やら引っ越しやらが忙しくてなかなか手を回せずにいたので、久しぶりの着手ということで、すでに履修していた第3章の、 Pimpl イディオムとファクトリメソッド辺りを復習してみ

    t-murachi
    t-murachi 2014/06/19
    べんきょーべんきょー
  • GCC 4.9がリリースされました - Faith and Brave - C++で遊ぼう

    GCC 4.9.0 released, full of improved C++11 and C++14 features C++14対応が主ですが、C++11にも、以下のサポート改善が入っています。 <regex>をサポート <map>、<set>、<unordered_map>、<unordered_set>に、ステートフルアロケータのサポートを追加 <regex>は、昨年のGoogle Summer of Codeで学生さんが実装したものですね。お金を出してくれたGoogleと、実装してくれたTim Shenさんに感謝です。 Google Summer of Code - GCC Wiki オンラインコンパイラWandboxでも、すでにGCC 4.9を使える状態になっています。 Wandbox

    GCC 4.9がリリースされました - Faith and Brave - C++で遊ぼう
    t-murachi
    t-murachi 2014/04/23
    あとで試す: 「<regex> をサポート」
  • ぼやきごと/2012-09-26/C++11:pimplイディオムにおけるデストラクタの default 指定 - ルーチェ's Homepage

    上述のコードにおいて = default の記述がある宣言は書いても書かなくても生成されるクラスは同じです。 しかし書かなかった場合、他の人がコードを読んだ時に「コンパイラに自動生成させようとしている」のか、「単に書き忘れた」のかが区別できません。 敢えて default 指定の宣言を記述することで、「私はこれらをコンパイラに自動生成させています」というアピールになります。 また、他の人だけでなく、コンパイラにもその意図を明示的に伝えることができ、コンパイラによっては最適化の助けになる可能性もあるでしょう。 C++11では、特別な処理をさせる場合を除き、記述を省略したりましてや空っぽの実装を書いたりせずに default 指定を積極的に用いるべきです。 特にデストラクタについては、リソースの解放はメンバ変数に任せてヘッダファイルでの default 指定を義務化するくらいのつもりで考えるべ

    t-murachi
    t-murachi 2013/12/18
    humm...
  • Amazon.co.jp: C++ Programming Language, The: Stroustrup, Bjarne: 本

    Amazon.co.jp: C++ Programming Language, The: Stroustrup, Bjarne: 本
    t-murachi
    t-murachi 2013/06/28
    なか見検索で結構見られるのな。
  • C++11の糞仕様と戦ってアクセッサをconstexprにする - ボレロ村上 - ENiyGmaA Code

    中3女子です。 C++11が、C++03およびそれ以前に対して明らかに優れていることは今更言うまでもない。 しかしながら、C++11にも恥ずべき糞仕様は存在する。 その糞の代表例が、constexprメンバ関数が暗黙でconst修飾されることである。 これによってどんな問題が生ずるかを、まずは見てゆく。 constexprメンバ関数が暗黙でconst修飾される糞仕様の問題 まずは、適当な値のホルダクラスを考える。 template<typename T> struct Holder { T value; }; Holderはリテラルクラスの要件を満たすから、当然定数式として扱える。 constexpr auto t = Holder<int>{ 100 }; constexpr int i = t.value; では、下記のコードは合法か? constexpr int i = Holder

    C++11の糞仕様と戦ってアクセッサをconstexprにする - ボレロ村上 - ENiyGmaA Code
    t-murachi
    t-murachi 2013/06/07
    humm...
  • GCC 4.8のリリースノートとC++関連の変更

    GCC 4.8 Release Series — Changes, New Features, and Fixes - GNU Project - Free Software Foundation (FSF) GCC 4.8のリリースノートから興味深い点を紹介する。 まず、GCC 4.8は、C++で書かれるようになった。これはつまり、GCC 4.8のビルドには、C++03に準拠したコンパイラーが必要になる。 GCC 4.8は、ループ最適化の方法として、ループ回数の上限をaggressiveに解析するようになった。これは言語規格で許されている範囲の実装である。これにより、既存の規格違反のプログラムが正しく動かなくなる。たとえば、SPEC CPU 2006の464.h264ref (H.264のリファレンスエンコーダーを流用したSPECのベンチマーク)や、同じくSPECのベンチマークである41

    t-murachi
    t-murachi 2013/03/26
    1x じゃなくて 1y なのね…^_^;
  • C++11における空のリスト初期化

    江添亮 自由ソフトウェア主義者 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

    t-murachi
    t-murachi 2013/03/26
    んー、C++ がデフォルトで値の初期化を行わないのは処理効率を優先するため、であった気もするんだが、こうなってくるとその仕様自体実は誰からも支持されていなかったって事なのかなぁ…(汗
  • GCC 4.8がリリースされた - Faith and Brave - C++で遊ぼう

    GCC 4.8 Release Series Changes, New Features, and Fixes C++周りの変更は以下。 言語 thread_localキーワードのサポートを追加。 属性構文のサポートを追加。GCCに元々あった独自属性も、C++11属性の構文で提供されるようになりました。 alignas属性のサポートを追加。 継承コンストラクタのサポートを追加。 C++1yの実験的サポートのために、「-std=c++1y」コンパイルオプションを追加。このオプションをオンにすることで、N3386で提案された「戻り値型を推論する関数宣言構文」が利用可能になります。 ライブラリ(libstdc++) forward_listを、標準のアロケータ要件を満たすよう修正(allocator_traits) this_thread::sleep_for()、this_thread::sl

    GCC 4.8がリリースされた - Faith and Brave - C++で遊ぼう
    t-murachi
    t-murachi 2013/03/26
    gcc もついにここまで来てたのか…。