タグ

c++に関するcastaneaiのブックマーク (71)

  • C++11の時間ライブラリは美しさを追求したあまり、かえって使いにくくなっているのではないか

    C++11の時間関係のライブラリは、非常に美しい設計をしている。 まず、経過時間そのものを表すdurationがある。Cライブラリでいえば、time_tの値の単位を指定するクラスだ。Cライブラリでは、time_tの値は秒であったが、C++では、単位を指定できるのだ。 durationでは、単位ライブラリであるratioを使って、秒、ミリ秒、マイクロ秒などといった時間単位を表現している。 秒 std::chorno::seconds ミリ秒 std::chrono::milliseconds ナノ秒 std::chrono::nanoseconds 時 std::chrono::hours それ以外の、独自の刻みがほしいとしても、簡単に作成できる。 4分33秒 using four_minutes_thirty_three_seconds = std::chrono::duration< l

    castaneai
    castaneai 2019/11/10
    確かにって思った
  • 江添亮のC++入門

    書はプログラミングの経験はあるがC++は知らない読者を対象にしたC++を学ぶためのである。書はすでに学んだことのみを使って次の知識を説明する手法で書かれた。C++コンパイラーをC++で書く場合、C++コンパイラーのソースコードをコンパイルする最初のC++コンパイラーをどうするかというブートストラップ問題がある。書はいわばC++における知識のブートストラップを目指しただ。これにより読者はを先頭から読んでいけば、まだ学んでいない概念が突如として無説明のまま使われて混乱することなく読み進むことができるだろう。 C++知識のブートストラップを意識した入門書の執筆はなかなかに難しかった。ある機能Xを教えたいが、そのためには機能Yを知っていなければならず、機能Yを理解するためには機能Zの理解が必要といった具合に、C++の機能の依存関係の解決をしなければならなかったからだ。著者自身も苦し

  • atomic変数間のatomicなコピー - yohhoyの日記

    プログラミング言語C/C++が提供するatomic変数*1とそのコピー操作に関するメモ。 2個のatomic変数間における “atomicなコピー操作” は提供されない。通常は “atomic変数からの読込(load)”+“atomic変数への格納(store)” で代用すればよい。ただし、下記コードのような2つのコピー操作が並行実行された場合、load/store操作のインターリーブが起こりうることに留意。*2 // C++11 #include <atomic> using namespace std; // C11 #include <stdatomic.h> atomic_int x = ATOMIC_VAR_INIT(0); // x = 0 atomic_int y = ATOMIC_VAR_INIT(1); // y = 1 void thread1() { atomic_s

    atomic変数間のatomicなコピー - yohhoyの日記
    castaneai
    castaneai 2017/10/17
    “真に“atomicなコピー操作”が必要ならば、mutex等を用いた排他制御を行うこと。ただし、この場合atomic変数とする必然性はない。”
  • C++11 std::atomicを使いこなすための情報リスト - Pebble Coding

    C++11 std::atomicは難解です。 しかし、パフォーマンスが出ない時に頼りになるツールでもあります。 情報はなかなか少ないので、適宜まとめておきます。 CPUの動作に関する説明 CPU とキャッシュのはなし - graphics.hatenablog.com プログラミング :: 高速なプログラムを書く為に :: メモリ C++11のstd::atomicに関する説明 次期C++に導入されるメモリバリアについて解説してみる - yamasaのネタ帳 C++ Memory Model https://www.think-cell.com/en/career/talks/pdf/think-cell_talk_memorymodel.pdf かなり丁寧な図による説明です。 これでmemory_order_seq_cstとmemory_order_relaxedについての理解が進みま

    C++11 std::atomicを使いこなすための情報リスト - Pebble Coding
    castaneai
    castaneai 2017/10/17
    std::atomic と C++ のメモリバリアまわりの日本語解説があるサイトのまとめ
  • We Make a std::shared_mutex 10 Times Faster

    Atomic operations and C++11 memory barriers and assembler instructions generated on x86_64 CPUs This article details the atomic operations and C++11 memory barriers and the assembler instructions generated by it on x86_64 CPUs. Download all files from GitHub Download bench_contfree - 8.5 KB Download contfree_shared_mutex - 8.4 KB Three related articles: We make any object thread-safe We make a std

    We Make a std::shared_mutex 10 Times Faster
    castaneai
    castaneai 2017/10/14
    lock-freeとかそのあたり?長い英語だけど、少しずつ読んでいきたい・・。
  • Rust開発者のためのC++入門書:所有権と借用について | POSTD

    今日、ソーシャルサイト「reddit」を見ていたら、“ Rustの基礎を学んでからC++を始める場合 、何を勉強すればいいか”と問う投稿があり、私は自分のブログを復活させ、その中で質問への答えを書いたら面白いのではと考えました。 私にはRustを学んだ後にC++を扱う仕事に就いた経験があるため、Rustの経験を持つ人がC++に移行していく様子をまとめてみたいと思ったのです。 稿はC++の構文と特徴を既に知っていて、RustからC++の世界に移行する方法に興味を持っている読者を対象とします。 しかし、私は全てに精通しているわけではないので、稿では所有権(ownership)、借用(borrowing)、ライフタイム(lifetime)に焦点を当てて説明していきます。 所有権と移動 Rustの一番大きな特徴は所有権です。所有権は、プリミティブ型ではない値に対するデフォルトの動作として、コピ

    Rust開発者のためのC++入門書:所有権と借用について | POSTD
    castaneai
    castaneai 2017/03/15
    moveまわり
  • 中3女子でもわかる constexpr

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

    中3女子でもわかる constexpr
  • http://hp.vector.co.jp/authors/VA046927/tempo/tempo.html

  • Amazon.co.jp: Effective Modern C++ ―C++11/14プログラムを進化させる42項目: Scott Meyers (著), 千住治郎 (翻訳): 本

    Amazon.co.jp: Effective Modern C++ ―C++11/14プログラムを進化させる42項目: Scott Meyers (著), 千住治郎 (翻訳): 本
  • C++11で数字→文字列はstd::to_string()、文字列→数字はstd::stoi()とかstd::stod()とか - minus9d's diary

    数字から文字列 スクリプト言語でよくある、数字を文字列に変換する関数がC++11でも提供されています。std::to_string(100)などと書くだけで数字が文字列に変換できます。 #include <iostream> #include <string> int main() { std::string str = "Holland, " + std::to_string(1945); std::cout << str << std::endl; return 0; } ただし変換方法はおまかせで高度なフォーマット指定はできません(たぶん)。フォーマットを指定したい場合は、Cの流儀でsprintf()関数を使うか、C++の流儀でstd::ostringstreamを使います。以下は、数字777を、"00777"と0埋め5桁の文字列に変換する例です。(参考:C++ の iostream

    C++11で数字→文字列はstd::to_string()、文字列→数字はstd::stoi()とかstd::stod()とか - minus9d's diary
  • カスタムバッファ

    (このコンテンツはメールマガジンの STL & iostream 入門に手を加えたものです。「 STL と iostream が使えるかのチェック」等はメールマガジンの方のページをご覧ください) iostream が用意するバッファクラスは「文字列」「ファイル」「標準入出力」のみっつしか用意されていません(ライブラリによっては最後のはありません)。今回は、新たにバッファクラスを作ってみましょう。 と言っても、バッファクラスの拡張は一筋縄ではいきません。「文字列」と「ファイル」では内部的な操作が全然違います。その「内部」を自分で作るわけですから、それは大変なことです。 ということで、まずは簡単な例から試してみましょう。次のクラスは「ただ文字列を格納するだけのバッファクラス」です。 ////////////////////////////////////////////////////////

  • 条件変数 Step-by-Step入門 - yohhoyの日記(別館)

    多くのプログラミング言語では、マルチスレッド処理向け同期プリミティブとして「ミューテックス(mutex)」と「条件変数(condition variable)」を提供しています*1 *2。ミューテックスは排他制御機構として有名ですし、その動作もロック(lock)/アンロック(unlock)と比較的理解しやすいため、不適切に利用されるケースはあまり無いと思います*3。一方、条件変数の動作仕様はしばしば誤解され、不適切な利用による並行性バグに悩まされるケースが多いようです。 記事では、スレッドセーフなFIFO(First-In-First-Out)キューを段階的に実装していく事例を通して、条件変数の適切な使い方について説明していきます。例示コードではC++11標準ライブラリを用いますが、Pthreads(POSIX Threads)やC11標準ライブラリへは単純に読み替え可能です(→Pthr

    条件変数 Step-by-Step入門 - yohhoyの日記(別館)
  • iostreamの拡張

    Last update 1999/09/22 iostreamの拡張 (C)平山直之 無断転載は禁止、リンクはフリー 誤字脱字の指摘は歓迎 iostreamの拡張について 例によって唐突ですが、iostreamの拡張について書いてみたいと思います。ここでいう「拡張」とは、自分でcinとかcoutみたいなものを作ろう、ということです。 「こんなもん一番最初に教えんなや」と比較的評判の悪いiostreamですが、 演算子オーバーロードがいわば「御法度」な使い方をされている メソッドの命名法がやたら変 などのように表面的に美しくないのが悪評の原因で、その辺に目をつぶれば実はそれなりによくできたシステムだったりします。 拡張方法も一度覚えると結構便利ですぜ。 iostream拡張の基礎知識 iostream、というと、そのインターフェイス(Java的な意味じゃなくて)であるところのstd::cin

  • 本当は怖くないムーブセマンティクス - yohhoyの日記(別館)

    この記事はC++ Advent Calendar 2012の15日目にエントリしています。 内容はC++11「ムーブセマンティクス」の入門記事となっています。 もくじ ムーブセマンティクス再考 シンタックス vs. セマンティクス コピー vs. ムーブ ムーブのもつ2つの意味 C++11のムーブセマンティクス対応 auto_ptrからunique_ptrへ auto_ptrの暗い過去 unique_ptrへの移行 std::moveの役割 ムーブセマンティクスを使おう C++11標準ライブラリとムーブ ムーブ"後"の中身は? ムーブを利用して関数を書く (文のみ約9500字) まえがき To move or not to move: that is the question. ― Bjarne Stroustrup, 2010(改)*1 プログラミング言語C++の新しい国際標準規格*2

    本当は怖くないムーブセマンティクス - yohhoyの日記(別館)
  • GitHub - ipkn/crow: Crow is very fast and easy to use C++ micro web framework (inspired by Python Flask)

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - ipkn/crow: Crow is very fast and easy to use C++ micro web framework (inspired by Python Flask)
    castaneai
    castaneai 2014/07/09
    C++でWebマイクロフレームワークという発想すごい
  • モダン C++ プログラミング - 日本語公開記事 - Confluence

    このドキュメントはサイボウズ社内のトレーニング用に作成したものです。 作成時点では C++11 はまだあまり利用できない状況でしたので、C++98 ベースの記述になっています。 いずれ更新を予定しています。 モダンの定義モダンとはテンプレートメタプログラミング(TMP)を駆使することです。嘘です。 宗教論争に意味はないので、ここでは 「最近の C++ の仕様・機能を理解し、C より実装効率が良く不具合の少ない」 プログラミング技法を「モダン C++ プログラミング」と定義します。 つまり、不具合が少なく、かつ C にはもう戻れなくなるような効率の良さを達成するものです。 学習効率(ROI)が極めて良くないような技法(例えば TMP)は、この定義では除外されます。 勉強方法お勧めの順序は以下。決して全部を読もうとしないこと。 C++ Language Tutorial のような、あっさりした

    castaneai
    castaneai 2013/12/19
    C++の記事って読むと楽しい.(使わないけどw)
  • 社内LT#1 至高のイケメン言語C++について

    社内LT#1 至高のイケメン言語C++について — Presentation Transcript 菅原 源一郎  菅原 源一郎といいます  詳しくはwikipediaで! http://ja.wikipedia.org/wiki/C++  組み込み系 ゲーム開発 画像処理 株や為替など、シビアなレイテンシが求められるシ ステム Web系でも局所的にパフォーマンスが欲しい場面で C++を使うのは良くある話  とにかく速いよ!効率的だよ! パフォーマンスの問題で「C++じゃなきゃダメ」はあっても「C++以外じゃなきゃダメ」はほぼない 有名なソフトウェア, システムに多数実績あり  使わない言語機能がパフォーマンスに悪い影響を及 ぼすことはない C言語と同等以下のオーバーヘッドで動作可能 というかC言語とアセンブリレベルで一致する (一部のコストの高い言語機能を除く)

  • NuGet for C++ - C++ Team Blog

    The wait is over.  NuGet support for C++ projects is here. Quick Links • NuGet 2.5 Download page: https://nuget.codeplex.com/releases/view/96733 • CoApp’s Powershell Tools Installer to create C++ NuGet packages: http://coapp.org/releases • Some C++ NuGet packages to try out:  http://nuget.org/profiles/coapp/ Start downloading, then head on back here to learn more about NuGet and how to create and

    NuGet for C++ - C++ Team Blog
    castaneai
    castaneai 2013/06/05
    マジかよEclipse売ってくる
  • Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京

    Boost.勉強会 #11 東京(http://partake.in/events/e75cde86-75c8-47ce-b647-2dbd0495b053)で発表した資料です。補足資料はこちら: http://d.hatena.ne.jp/hecomi/20130604/1370356501

    Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
    castaneai
    castaneai 2013/06/01
    C++とJavascript(V8)の連携
  • C++11 スマートポインタの話 - ここは匣

    C++にはガーベジコレクタが言語的には存在しないので、動的に確保したオブジェクトのメモリの管理はプログラマが責任を持って管理しなければ、メモリリーク・リソースリークなどの問題を生じてしまいます。 今時のプログラマはこうした問題を引き起こすリスクを減らす為に、記述ミスの起こりやすい生のポインタを使い自力でnewとdeleteを記述する事を避けて、安全なスマートポインタ、即ちオブジェクトの寿命により自動的にメモリ解放を行う便利なポインタを利用するべきです。 しかし、スマートポインタと言っても種類が幾つかあり、落とし穴も存在するのでどういった状況でどれを利用するのが良いのかを考察してみます。 Dynamic memory managementを見てみても C++11から随分増えていますね http://en.cppreference.com/w/cpp/memory std::auto_ptr

    C++11 スマートポインタの話 - ここは匣