May 17, 2011Download as PPTX, PDF9 likes4,935 views FDIS(N3290) をベースにしたC++0xの総復習です。 Boost.勉強会 #5 名古屋 ( http://partake.in/events/b9463b89-0a08-4996-9843-f52252ed2dcf )にて発表。Read less

現在、BoostのML上で、C++0x上における、興味深いenable_ifの使い方が示されている。簡単にいうと、こうなる。 // Never defined extern void * enabler ; template < typename T, typename std::enable_if< std::is_arithmetic<T>::value >::type *& = enabler > void f( T ) { std::cout << "T is arithmetic" << std::endl ;} template < typename T, typename std::enable_if< std::is_pointer<T>::value >::type *& = enabler > void f( T ) { std::cout << "T is point
すでに多くの方がご存知のことと思いますが、株式会社ロングゲートからまもなく『プログラミングの魔導書 〜Programmers' Grimoire〜』が発刊されます。 発売前レビューをするということで、id:faith_and_brave さんより PDF を頂戴していたのですが、まったく自分の役割を自覚していなかった (内容のチェック的なものかと思ってました) ので、予約締切間近 (8/6、つまり明日までです!) ですが、ちょっと紹介させてもらいますね。 Bjarne Stroustrupへのインタビュー デンマーク生まれの長男で髪の毛が年々少なくなっているというビャーネ・ストロストォプさんへのインタビューです。インタビュワーは、丸刈りで丸刈りでC++が好きで「本の虫」というブログを執筆されている、江添さんです。 C++0xの現況をざっくり把握するのに、どこを見るのが一番なんだろうか、と悩
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の新しい機能)されていないこと。 コピー、ムーブコンストラク
“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
PODの構造体があったとき、メンバ変数の初期値を指定したい、というモチベーションがあったりするのですが、PODは非自明なコンストラクタを書けないので以下はNGになります。 struct S { int x; S() : x(3) {} // NG : これだとPODにならない }; C++0xではメンバ変数の初期化をメンバ変数定義時に行うことができ、コンストラクタで明示的な初期化を書かない場合のデフォルト値を指定できるのですが、現時点でのドラフトを読む限り、非自明なコンストラクタを書いたことにはなりそうにないので、以下のように書いてもPODになりそう。 struct S { int x = 3; }; ほんとかな。ちょっと怪しい。 追記: できないっぽいです。 @cpp_akira p252 12.1.5で、A def-ctor is trivial if ... and if ... n
かなり前から提案は出ていましたが、N3090のWorking Draftから、 暗黙に定義される特殊メンバ関数に、ムーブコンストラクタとムーブ代入演算子が追加されることになりました。 つまり、以下のようなクラスがあった場合、 struct X { std::string s; }; Xは以下のようなメンバを持つクラスになります。 struct X { std::string s; X() : s() {} // デフォルトコンストラクタ X(const X& x) : s(x.s) {} // コピーコンストラクタ X(X&& x) : s(static_cast<std::string&&>(x.s)) {} // ムーブコンストラクタ // : s(std::move(x.s)) {} X& operator=(const X& x) { s = x.s; return *this;
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のlambdaを完全に解説せんとする目的を以て書かれた。サンプルコードは最小に留め、エラー処理等は省いた。この記事さえ読めば、今日からlambdaを恐れることなく使う本物のC++0xプログラマになれるだろう。 lambdaとは何ぞや lambdaである。あるものは、lambda関数、あるいは無名関数という名称を使っている。いったいlambdaとは何なのか。 lambdaは関数である。また、特に名前はない。したがって、lambda関数、無名関数と呼ぶのは、間違ってはいない。しかしここでは、単にlambdaと呼ぶことにする。 lambdaを定義しよう lambdaは関数オブジェクトである。lambdaは関数オブジェクトである。これはとても大事なので二度書いた。lambdaは関数オブジェクト以外の何物でもない。ところが不思議なことに、皆lambdaが単なる関数オブジェ
インテル コンパイラーではOpenMP 3.0やC++ラムダ関数、並列コンパイルといった、新規格や最近注目されている機能がいち早く取り入れられている。本記事では、インテル コンパイラーが採用した新規格について解説する。 インテル コンパイラーの特徴の1つに、新しい技術や標準規格への素早いサポートが挙げられる。たとえば最新のインテル コンパイラー 11.1では、プログラムを簡単に並列化できる新たなキーワードが追加されているほか、11.0からの機能として現在策定中のC++の新規格「C++0x」や、新たな並列化基盤「OpenMP 3.0」のサポートが追加されている。本記事ではこれらの機能について、簡単ではあるがその概要と使用例を紹介しよう。 C++ 0xのサポート C++は1983年代に開発されて以来、しばらくは公式な標準化規格が存在せず、各コンパイラメーカーにより独自に拡張が加えられていった。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く