Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」

Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
C++AdventCalendarの記事です。 さて、 生配列使ってますか? tr1::array(boost::array) 使ってますか? 生配列使っていると答えた貴方、 →まず死ね。 はい、arrayが常識ですよね。 さて、とはいえ、 「テンプレートを使うと遅いしコードがでかいし」 「生配列が一番速いしコードが小さいし」 「なのでテンプレート禁止」 なんて話を聞くこともあるかと思いますが、 こういう事をいう人は大抵「テンプレートを書いたことがない」のに言ってます。 なぜか? こういう人が本当に心配しているのは「テンプレートが肥大化すること」じゃないのです。 「テンプレートが書けないし読めないのを認めたくないからです」 多くはCの老害だからですが、そういう人は放っておいてC++な人はきちんとテンプレートを使いましょう。 だって多くのテンプレートのコードは大きくもなければ非効率でもないか
目的 この記事は、C++0xのrvalue referenceを完全に解説せんとする目的を以て書かれた。サンプルコードは最小に留め、エラー処理等は省いた。この記事さえ読めば、今日からrvalue referenceを恐れることなく使う本物のC++0xプログラマになれるだろう。 lvalueとrvalueについて Cの時代では、lvalueとrvalueの違いは、代入演算子の左側か右側かという違いだけであった。つまり、left hand value, right hand valueの略である。従って、訳語も、左辺値、右辺値であった。C++においては、これはもはや正しくはない。従って、右辺値、左辺値というのも、誤訳である。それ故に、ここでは、これ以上、左辺値、右辺値という名称を使用しない。 誤解を恐れずにいえば、lvalueとは、明示的に実体のある、名前付きのオブジェクトであり、rvalue
マルチプラットホームライブラリを作ってみた。 ※リンク先pdf 有名なSEGA本の著者、平山さんによる今年のCEDECでの講演内容である。 ゲームプログラマになる前に覚えておきたい技術 作者: 平山尚出版社/メーカー: 秀和システム発売日: 2008/11/14メディア: 単行本購入: 112人 クリック: 3,473回この商品を含むブログ (193件) を見る 内容的には十分読み応えのあるのだが、一部釈然としないところもある。 主に4.9章の「標準ライブラリや言語機能について」というところから。 何故標準が嫌なのか ゲームプログラマはなぜかC++標準ライブラリを使わない。 いや、使おうとする人もいるが何かと理由をつけて使わない。 その理由が大体困ったような内容が多い。 リンク先でも書かれているが、vectorにはpush_back()やerase()がある。 そしてこれは安全性と性能の両
C++0x から新たに C++ に追加された要素に、ラムダ式というものがあります。 これは、ちょっとした関数を、その場で定義して使えるようにしたもので、 #include <vector> #include <numeric> #include <iostream> int main() { std::vector<double> v = { -1, 2, 1.5, -4 }; double prod = std::accumulate( v.begin(), v.end(), 1, []( double x, double y ){ return x * y; } ); std::cout << prod << std::endl; // 12 } のように使います。具体的には Faith and Brave のラムダ式解説などを参照してください。 さて、そんな便利なラムダ式ですが、その
書評 ストラウストラップのプログラミング入門作者: ビャーネ・ストラウストラップ,Bjarne Stroustrup,επιστημη,エピステーメー,遠藤美代子(株式会社クイープ)出版社/メーカー: 翔泳社発売日: 2011/08/10メディア: 大型本購入: 4人 クリック: 69回この商品を含むブログ (13件) を見る 読み終わりました。 読み終わってすぐの興奮した状態で書いてるので文章めちゃくちゃだったらすみません。 高いです。 分厚いです。 長いです。 読み終わった今では、見た目、値段以上の価値があると私は確信しています。 これは、「プログラミング」の入門書です。 「プログラミング言語」の入門書では無いです。 本当の初心者がプログラミングを独学で学ぶ為の本では無いです。 一人で読むなら、最低でもプログラミング環境を自分で整えられる位の力が必要です。 または、ベテランプログラマに
厚いと評判*1のこの本、本当に厚かった。 ストラウストラップのプログラミング入門 作者: ビャーネ・ストラウストラップ,Bjarne Stroustrup,επιστημη,エピステーメー,遠藤美代子(株式会社クイープ)出版社/メーカー: 翔泳社発売日: 2011/08/10メディア: 大型本購入: 10人 クリック: 283回この商品を含むブログ (52件) を見るでも凶器として使うならもう少し厚くてハードカバーのほうが(ry 参考までに手持ちの厚い本と比較してみた。ページ数と寸法はAmazonが元ネタ。 書名 ページ数 寸法 (cm) 実用 Common Lisp (IT Architects’Archive CLASSIC MODER) 928 23 x 18.4 x 5.8 FreeBSDビギナーズバイブル (MYCOM UNIX Books) 980 23.4 x 18.4 x
Code Project という有名サイトに、VC++の例外処理方法に関する記事があります (http://www.codeproject.com/cpp/Exceptionhandler.asp) が、そこにg++の例外処理方法を解説したコメントがありました。 ざっくりと次のような事を言っています(翻訳してるわけではないので詳しくは英文読んでください)。 g++は、VC++とはちょっと違うやりかたで例外処理を実装している。g++の場合、実際に例外がthrowされない限りは、try/throw/catchを使ったコードを書いてもランタイムのコストはかからない。 foo()がbar()を呼んでいて、bar()が例外を投げるとせよ。このとき、foo()はスタックに戻りアドレス*1を置いてからbar()を呼ぶ。この戻りアドレスを仮にXとする。 このときコンパイラは、 (X, 掃除コードのアドレス
Not your computer? Use a private browsing window to sign in. Learn more about using Guest mode
2018/06/23 Sony"s deep learning software and the latest information
C++0x ではスレッドライブラリが標準提供されます。 スレッド関連のヘッダは , , の 3 つです。 基本的には Boost.Thread と同じように使えます。 (最近は Boost.Thread が C++0x に合わせて修正されているようです) #include <threads> struct do_work { void operator()() {} }; int main() { do_work dw; std::thread t(dw); t.join(); } #include <mutex> std::mutex m; struct hoge {} data; void process(const hoge&) {} void foo() { std::lock_guard<mutex> lk(m); process(data); } // unlock mutex
C++0x では、各コンテナに emplace/emplace_back/emplace_front/emplace_hint というメンバ関数が追加されます。 こういうクラスがあった場合 struct something { something(int, int, int); }; something をコンテナの要素として追加する場合、 C++03 では以下のようにしていました。 vector<something> v; v.push_back(something(1, 2, 3)); この方法では、 something のコンストラクタによる一時オブジェクトの生成と、コピーのコストが発生します。 Placement Insert では、可変引数テンプレートによって要素型のコンストラクタ引数を受け取ることで 要素をコンテナ内で一度だけ生成し、コピーのコストをなくします。 vector<
C++0x で追加される STL アルゴリズム ・find_if_not find_if の逆. pred(*i) == false のイテレータを返す template<class InputIterator, class Predicate> inline InputIterator find_if_not(InputIterator first, InputIterator last, Predicate pred) { while (first != last && pred(*first)) ++first; return first; } #include <vector> #include <algorithm> using namespace std; // 偶数? bool is_even(int value) { return value % 2 == 0; } int
マルチスレッドアプリケーションでは、スレッドごとに一意なデータを保持する必要が起きます。 これを、スレッドローカル記憶域と呼びます。 C++0x では、これを言語でサポートするため、 thread_local というキーワードが追加され thread_local を付けて宣言された変数は、スレッドごとに一度だけインスタンス化されます。 #include <threads> thread_local int j = 42; void foo() { j = 43; } int main() { std::thread t(foo); t.join(); if(j != 42) abort(); } 【スレッド変数のアドレス】 &演算子は、スレッド変数に使用された場合、現在のスレッドの変数のアドレスを返します。 なので、スレッド変数のアドレスは定数ではありません。 スレッドローカル記憶域は、ア
以下のように、戻り値の型を後ろに書けるようになる // now std::vector<double> foo(double); // new auto foo(double) -> std::vector<double>; 戻り値の型を後置すると、decltype でパラメータを計算した型を戻り値の型にできる template <class T, class U> auto foo(T t, U u) -> decltype(t * u) { return t * u; } いろいろ応用できそうな気がする N2541 New Function Declarator Syntax Wording C++0x言語拡張まとめ
関数テンプレートの、デフォルトテンプレート引数が使えるようになる 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言語拡張まとめ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く