タグ

ブックマーク / faithandbrave.hateblo.jp (19)

  • 書籍『プログラミング言語C++ 第4版』 - Faith and Brave - C++で遊ぼう

    プログラミング言語C++第4版 - Amazon.co.jp C++の創始者Bjarne Stroustrupによる『プログラミング言語C++』の第4版、その日語版が出ます。この版では、C++11への対応が行われています。 SBクリエイティブ社のページはまだないようですが、Amazonでは、2015年1月26日発売になっています。

    書籍『プログラミング言語C++ 第4版』 - Faith and Brave - C++で遊ぼう
    gin0606
    gin0606 2014/12/04
  • C++14 randとrandom_shuffleが非推奨に - Faith and Brave - C++で遊ぼう

    N3924 Discouraging rand() in C++14, v2 C++14では、std::rand()とstd::random_shuffle()が非推奨(deprecated)になります。 std::rand()は昔から問題があると指摘されていて(多くの実装で線形合同法が使われていたり、RAND_MAXが小さかったり)、明確にこの関数の使用を禁止する分野やプロジェクトも多かったので、非推奨になります。std::rand()の代わりに<random>ヘッダの乱数生成器と分布を使いましょう。 std::random_shuffle()はstd::rand()に依存したアルゴリズムなので、道連れで非推奨になります。std::random_shuffle()の代わりにstd::shuffle()を使いましょう。 参照 N3924: Discouraging rand() in C+

    C++14 randとrandom_shuffleが非推奨に - Faith and Brave - C++で遊ぼう
    gin0606
    gin0606 2014/08/19
  • C++14の言語拡張まとめ - Faith and Brave - C++で遊ぼう

    C++14は、C++11に対するマイナーアップデートです。仕様のバグ修正や、C++11の比較的小さめな機能不足を補うバージョンになっています。 細かすぎる変更はさすがに書きませんが、ある程度大きめの変更を以下にまとめます。 この内容は、正式に策定されるまでに変更される可能性があります。 コア言語 2進数リテラル 変数テンプレート 通常の関数の戻り値型を推論 ジェネリックラムダ 一般化されたラムダキャプチャ constexpr関数の制限緩和 どこからともなく現れる結果の規定(前半, 後半) [[deprecated]]属性 数値リテラルの桁区切り文字 サイズ付きのデアロケーション initializer-listによるaggregate初期化の制約緩和 ロックフリーの定義 シグナルハンドラでできることの制限緩和と明確化 ライブラリ make_unique() コンパイル時整数シーケンス tu

    C++14の言語拡張まとめ - Faith and Brave - C++で遊ぼう
    gin0606
    gin0606 2014/08/19
  • C++14の仕様策定が完了しました - Faith and Brave - C++で遊ぼう

    We have C++14! - Standard C++ C++14のDIS(Draft International Standard)に対する各国の投票が行われ、満場一致で承認されました。各国から(主に日から)のコメントによる文面の細かな修正が残っていますが、その作業が完了次第、ISO/IEC 14882:2014(E) Programming Language C++、別名C++14の規格が発行されます。 C++14は、2011年に発行されたC++11に対するマイナーバージョンアップです。小さな機能追加、および文面のバグ修正が含まれます。 C++14の更新内容は、以下のエントリにまとめてあります: C++14の言語拡張まとめ コンパイラの実装状況(言語機能) 次はC++17です。そちらはメジャーバージョンアップになる予定で、その議論はすでに始まっています。

    C++14の仕様策定が完了しました - Faith and Brave - C++で遊ぼう
    gin0606
    gin0606 2014/08/19
    おー
  • C++Now! 2014のセッション概要翻訳が完了しました - Faith and Brave - C++で遊ぼう

    C++Now! 2014 - boostjp C++Now! 2014のセッション概要翻訳が完了しました。 C++Now!はBoostの開発者やC++標準化委員会のメンバが多く集まる、C++の最も濃いイベントです。そのセッション内容はどれも有用ですが、その資料全てを翻訳する余裕はありません。 それでもその有用な情報に触れるきっかけになればと思い、boostjpサイトでは、C++Now!のセッション概要を翻訳して公開しています。 この翻訳も、BoostCon時代から続いて5年目になります。これだけの量を毎年よく訳してるなーと自分でも思いつつ、今回も完成に向けてご協力していただいたzakさん、eagle_raptorさん、chichimotsuさんに感謝します。

    C++Now! 2014のセッション概要翻訳が完了しました - Faith and Brave - C++で遊ぼう
    gin0606
    gin0606 2014/08/16
  • C++14 constexpr関数の制限緩和 - Faith and Brave - C++で遊ぼう

    N3597 Relaxing constraints on constexpr functions N3598 constexpr member functions and implicit const N3652 Relaxing constraints on constexpr functions C++14では、constexpr関数の制限がいくつか緩和されます。 緩和されるリストは、以下になります: 変数宣言の許可 if文とswitch文の許可 全てのループ文の許可(for、範囲for、while、do-while) 変数書き換えの許可 戻り値型(リテラル型)として、voidを許可 追加として、constexpr非静的メンバ関数の暗黙のconst修飾を削除 変数宣言の許可 constexpr int f() { int result = 0; // OK // 関数f()自体がco

    C++14 constexpr関数の制限緩和 - Faith and Brave - C++で遊ぼう
    gin0606
    gin0606 2014/08/12
  • Boost 1.56.0がリリースされました - Faith and Brave - C++で遊ぼう

    Version 1.56.0 - Boost C++ Libraries Boost 1.56.0リリースノート - boostjp GitHubへの移行とモジュール化 このバージョンから、Boostの開発リポジトリがSubversionからGitHubに移行しました。それにともない、GitHub上ではBoostの各ライブラリが、モジュールという単位で分割されるようになりました。モジュールは、関連するライブラリを集めたものや、Boostのいろいろなライブラリで使うベースライブラリをまとめたものです。CoreやWinApiなどのモジュールは後者になります。 新ライブラリ Boost 1.56.0では、アラインメントを扱うAlignライブラリと、C++11のstd::type_indexのBoost版でもあり、それの拡張も入っているType Indexライブラリが追加されました。 非推奨ライブ

    Boost 1.56.0がリリースされました - Faith and Brave - C++で遊ぼう
    gin0606
    gin0606 2014/08/09
  • getかvalueか - Faith and Brave - C++で遊ぼう

    std::optionalが提案された最初の時期、中身のデータを取り出す方法が、間接参照演算子しかありませんでした。そのあと、私が「boost::optionalにはget()メンバ関数があるが、こちらにはない。私はポインタインタフェースよりは、そちらを使いたい。」と提案したところ、get()メンバ関数の代わりに、value()メンバ関数が入りました。 その経緯としてはこういうものです。 shared_ptrとunique_ptrには、生ポインタを取得するためのget()メンバ関数がある。 optionalは、見ようによってはスマートポインタと見なすこともできる。 optionalにget()メンバ関数を入れるのであれば、スマートポインタのように、ポインタを返すべきではないか。 optionalのget()はスマートポインタのインタフェースではなく、生データ(raw data, base

    getかvalueか - Faith and Brave - C++で遊ぼう
    gin0606
    gin0606 2014/08/06
  • C++でMaybeモナド - Faith and Brave - C++で遊ぼう

    今日 id:uskz に会ったときに「C++でもMaybeモナドできますよ」って言われたので調べたらこんなのあった Maybe monad in C++ #include <boost/variant.hpp> class Nothing {}; template <class T> class Just { public: T val; Just(T x) : val(x) {} }; template<class T, class F> boost::variant<Nothing, Just<T> > operator>>=(boost::variant<Nothing, Just<T> > x, F f) { return (boost::get<Nothing>(&x)==NULL) ? f(boost::get<Just<T> >(x).val) : Nothing(); }

    C++でMaybeモナド - Faith and Brave - C++で遊ぼう
    gin0606
    gin0606 2014/07/22
  • どの派生クラスのオブジェクトが代入されているかを調べる - Faith and Brave - C++で遊ぼう

    #include <iostream> #include <typeinfo> struct Base { virtual void member_function() {} // 仮想関数を持たせておく必要がある }; struct Derived : public Base {}; int main() { Base* p = new Derived(); if (typeid(*p) == typeid(Base)) { std::cout << "Base" << std::endl; } if (typeid(*p) == typeid(Derived)) { std::cout << "Derived" << std::endl; } } 出力: Derived

    どの派生クラスのオブジェクトが代入されているかを調べる - Faith and Brave - C++で遊ぼう
    gin0606
    gin0606 2014/07/04
    よくわからないけど便利そう
  • C++0x - Default template arguments for function templates - Faith and Brave - C++で遊ぼう

    関数テンプレートの、デフォルトテンプレート引数が使えるようになる template <class T, class U = double> void f(T t = 0, U u = 0); void g() { f(1, 'c'); // f<int,char>(1,'c') f(1) // f<int,double>(1,0) f(); // error: T cannot be deduced f<int>(); // f<int,double>(0,0) f<int,char>(); // f<int,char>(0,0) } DR226 Default template arguments for function templates C++0x言語拡張まとめ

    C++0x - Default template arguments for function templates - Faith and Brave - C++で遊ぼう
    gin0606
    gin0606 2014/07/02
    テンプレートのデフォルトも指定できたのか
  • C++0x explicit bool - Faith and Brave - C++で遊ぼう

    スマートポインタのようなクラスを作成する場合、if文でヌルポインタかどうか判定できるようにするために operator boolをオーバーロードします。 template <class T> class smart_ptr { T* p_; public: operator bool() const { return p_ != 0; } }; smart_ptr<int> p; // OK if (p) { // ポインタは有効 } else { // ポインタは無効 } しかし、この方法では以下のような意味のないコードもコンパイルが通ってしまいます。 float f = p; int x = p + 1; cout << p << endl; C++03には、この問題を解決するために"conversion to unspecified bool"というイディオムがあります。 これを使用

    C++0x explicit bool - Faith and Brave - C++で遊ぼう
    gin0606
    gin0606 2014/07/02
  • C++0xの言語拡張まとめ(※随時更新) - Faith and Brave - C++で遊ぼう

    C++0xの概要はこちら ・Angle bracket テンプレートの連続した山カッコの問題の解決 ・初期化子リスト ユーザー定義のクラスで配列のような初期化構文を実装可能になる ・Uniform initialization コンストラクタの構文と初期化子リストの構文が一様になる ・デリゲーティング・コンストラクタ コンストラクタから他のコンストラクタを呼び出せる ・auto 型推論 ・記憶クラス指定子としての auto の削除 autoキーワードの意味が変更になるため、下位互換がなくなる ・decltype sizeofの型版 ・Template Aliases テンプレートを使用して型の別名を付けることができる。いわゆるtemplate typedef ・拡張sizeof 構造体/クラスのメンバをインスタンス化せずにsizeofすることが可能になる ・nullptr ヌルポインタを表

    C++0xの言語拡張まとめ(※随時更新) - Faith and Brave - C++で遊ぼう
    gin0606
    gin0606 2014/07/02
  • Faith and Brave - C++で遊ぼう - C++0x - decltype

    sizeofの型を返す版 int n1 = 3; decltype(n1) n2 = 10; // int n2; decltype(n1 + n2) value; // int value; 関数の戻り値の型でもOK int foo(); decltype(foo()) value; // int value; template <class Iterator> void something(Iterator first, Iterator last) { decltype(*first) value; // ↓の場合、int value; ... } vector<int> v; something(v.begin(), v.end()); C++0x言語拡張まとめ

    Faith and Brave - C++で遊ぼう - C++0x - decltype
    gin0606
    gin0606 2014/07/02
  • 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++で遊ぼう
    gin0606
    gin0606 2014/06/25
  • C++14 文字列オブジェクトリテラルと時間リテラル - Faith and Brave - C++で遊ぼう

    先日、「C++14 std::complexの標準ユーザー定義リテラル」を書きました。 今回は、文字列オブジェクトリテラルと、時間リテラルを紹介します。 basic_stringリテラル sサフィックスを付けた文字列リテラルは、basic_stringクラスのオブジェクトになります。 using namespace std::string_literals; std::string a = "hello"s; std::string b = u8"hello"s; // UTF-8のstd::stringリテラル プレフィックスでLを付けるとwstring、uを付けるとu16string、Uを付けるとu32stringになります。 using namespace std::string_literals; std::wstring c = L"hello"s; std::u16string

    C++14 文字列オブジェクトリテラルと時間リテラル - Faith and Brave - C++で遊ぼう
    gin0606
    gin0606 2014/06/24
  • 生文字列リテラルで簡単なJSON - Faith and Brave - C++で遊ぼう

    C++11の生文字列リテラル(Raw String Literals)を使うと、簡単なJSONをささっと書けて便利。文字列の中に何も考えずダブルクォートを書ける。 #include <iostream> #include <string> int main() { std::string json = R"({"user_id": 123, "name": "Akira"})"; std::cout << json << std::endl; } 出力: {"user_id": 123, "name": "Akira"} Boost.Formatと組み合わせる例: #include <iostream> #include <string> #include <boost/format.hpp> int main() { std::string json = (boost::format(R

    生文字列リテラルで簡単なJSON - Faith and Brave - C++で遊ぼう
    gin0606
    gin0606 2014/06/18
  • 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++で遊ぼう
    gin0606
    gin0606 2014/05/12
    四年前だ
  • C++テンプレートテクニック 第2版 を出します - Faith and Brave - C++で遊ぼう

    2009年に出版した書籍『C++テンプレートテクニック』の第2版を出版します。 C++テンプレートテクニック 第2版 - Amazon.co.jp C++テンプレートテクニック 第2版 - SBクリエイティブ 発売日は、2014年4月17日(木)です。 C++テンプレートテクニック 書は、プログラミング言語C++のテンプレート機能に関する技法を解説したです。 プログラムをより汎用的にしていくにあたって起きる、様々な問題への解法を提供します。 第2版の更新内容 第2版の主な更新は、C++11への対応です。C++11に追加された機能を使用した各種技法を掲載しています。C++03の技法で今もなお有用なものは残してあります。 第2版では、以下のような変更を行いました: 第1版の章「Extension Member Function」および「C++0xにおけるテンプレート」を削除 新章「コンセプ

    C++テンプレートテクニック 第2版 を出します - Faith and Brave - C++で遊ぼう
    gin0606
    gin0606 2014/04/14
  • 1