タグ

C++0xと!share-withに関するtyruのブックマーク (40)

  • c++0x syntax support

    tyru
    tyru 2010/11/07
    C++0x、syntaxだけでも誰か作ってくんないかなー(自分はC++0xのsyntaxとかあまり知らないので作れないあとあまり需要がない
  • std::vector の shrink_to_fit - 野良C++erの雑記帳

    C++0x の std::vector には、新しく shrink_to_fit() メンバ関数が用意されています。 これは「 vector の確保しているメモリ領域を、その大きさに見合ったサイズまで縮小する」関数で、 典型的な使い方は、以下のような感じになります: // std::vector に格納される要素数の見当がつけられない // が、「上限」は分かる。このとき余計な領域の再確保を避けたい std::size_t const limit = 〜〜; // vector に格納される要素の上限 std::vector<T> vec; // まず上限までメモリ領域を確保する vec.reserve( limit ); // vec に格納していく // ... // 格納終了。しかし、 // このままだと巨大なメモリ領域を占有してしまうので、 // vec の確保している領域を「 s

    std::vector の shrink_to_fit - 野良C++erの雑記帳
  • constexprがわけわからないレベルに達している

    もうconstexprについていく自信がない。現在、文面にバグがあるので議論されている最中だが、どうも、来の意図する定義では、以下のようなことができるはずである。 constexpr int f() { return 1 ; } constexpr int g() { return 2 ; } constexpr int h() { return 3 ; } constexpr int (*table[])(void) = { &f, &g, &h } ; constexpr int call( int i ) { return table[i]() ; } これは、ジャンプテーブルをコンパイル時に構築して、コンパイル時に実行するコードである。 また、initializer_listを、constexpr対応させようという意見もある。現在、initializer_listは、conste

  • C++11 FAQ

    訳者注 下記の文章は C++0x - the next ISO C++ standard の暫定勝手和訳です。 翻訳は現在進行中であり、未完成かつ不正確である可能性があります。 っていうか未完成かつ不正確です。 正しい情報を必要とされる方は、原文を当たってくださいますようよろしくお願いします。 誤訳の指摘は大歓迎です。 2010年01月06日更新 (訳注: 和訳は2010年01月21日更新) この文書 (訳注: 原文) は Bjarne Stroustrup が記述、更新している。 建設的なコメント、訂正、参考資料、提案はもちろん大いに歓迎する。 現在、著者は参考資料の充実化と清書に取り組んでいる。 C++0x は次期 ISO C++ 標準である。 現時点の 草案 を、コメント募集のため公開している。 以前の (そして現在の) 標準は、しばしば C++98 や C++03 と呼ばれる; C

  • C++0x std::swapが定義されているヘッダファイルが変更 - Faith and Brave - C++で遊ぼう

    N3000で、std::swapが<algorithm>から<utility>に移動したようです。 「std::swapを使うためだけに<algorithm>なんてでかいヘッダをインクルードできるかー」 という人にはうれしい変更。 C++0x言語拡張まとめ

    C++0x std::swapが定義されているヘッダファイルが変更 - Faith and Brave - C++で遊ぼう
  • 2008-09-24 - Faith and Brave - C++で遊ぼう

    C++03 には、 map::operator[] const がなくて 切実にほしかったのですが、 C++0x では map::at メンバ関数が追加されるようです。 namespace std { template <class Key, class T, class Compare = less<Key>, class Allocator = allocator<pair<const Key, T> > > class map { public: ... // 23.3.1.2 element access: T& operator[](const key_type& x); T& operator[](key_type&& x); T& at(const key_type& x); const T& at(const key_type& x) const; ... }; } uno

    2008-09-24 - Faith and Brave - C++で遊ぼう
  • C++ 0x Scoped Allocator Model - Faith and Brave - C++で遊ぼう

    C++0x では、Scoped Allocator Model というネストしたコンテナ(stringのvectorとかlistのmapとか)の メモリ割り当てとして、コンテナとコンテナの各要素のアロケータを指定できるようになります。 以下は、vectorの例: Scoped Allocator Model のために、 std::scoped_allocator_adaptor というクラスが提供されます。 namespace std { template <Allocator OuterA, Allocator InnerA = unspecified allocator type> class scoped_allocator_adaptor; } 使用例: 指定した領域から alloc するような Scoped allocator を作成する class SimpleArena {

  • C++0x C99対応 - Faith and Brave - C++で遊ぼう

    C++0xでのC99対応は以下 long long int型 __func__ 定義済みマクロ __STDC_HOSTED__ __STDC_VERSION__ __STDC_ISO_10646__ _Pragma演算子 可変引数マクロと空引数マクロ ユニバーサルキャラクタ名 文字列リテラルとワイド文字列リテラルの結合 識別子にユニバーサルキャラクタ名と、処理系依存文字の使用を許可(先頭数字はダメ) N1653 Synchronizing the C++ preprocessor with C99 C++0x言語拡張まとめ

    C++0x C99対応 - Faith and Brave - C++で遊ぼう
  • C++0x Placement Insert(配置挿入) - Faith and Brave - C++で遊ぼう

    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 Placement Insert(配置挿入) - Faith and Brave - C++で遊ぼう
  • 個人的メモ:GCCとMSVCのC++0x対応について - krustf の雑記

    【MSVC】 C++0x Core Language Features In VC10: The Table - Visual C++ Team Blog - Site Home - MSDN Blogs 【GCC】 C++0x/C++11 Support in GCC - GNU Project - Free Software Foundation (FSF) 【各種C++の対応表】 C++0xCompilerSupport - Stdcxx Wiki

    個人的メモ:GCCとMSVCのC++0x対応について - krustf の雑記
  • lambdaでデータメンバーのキャプチャー

    まず始めに明言しておくと、lambda式でデータメンバーはキャプチャーできない。lambda式は、ローカル変数しかキャプチャできない。従って、このブログのタイトルは、すでに間違っている。ではなぜこんなタイトルなのか。それは。lambda式では、データメンバーを使うことが出来るからだ。これは、誤解されやすい。 struct C { int x ; void f() { [=]{ return x ; } ; } } ; これは、完璧にwell-formedなC++0xのコードである。ご覧のように、データメンバーが使える。「ほれ見ろ使えるじゃねぇか。するてぇと、データメンバーもキャプチャーできるに違ぇねぇ」と思われるかもしれない。しかし、データメンバーは、キャプチャーできない。 では、このlambda式は、何をキャプチャーしているのか。thisである。上の例は、以下のように書くこともできる。

  • noexcept operator

    ふときがつくと、noexcept operatorなるものが追加されていた。これは、オペランドの式が、例外を投げそうな式を含む場合、falseを返す演算子である。結果はもちろん、定数だ。つまり、メタプログラミングに使える。オペランドの式は、評価されない。 void f() noexcept; void g() ; noexcept( f() ) ; // true noexcept( g() ) ; // false noexcept( throw 0 ) ; // false // ポリモーフィック型 struct Base { virtual void f() {} } ; struct Derived : Base { } ; Base base ; noexcept( dynamic_cast<Derived &>(base) ) ; // false noexcept( type

  • 右辺値参照の簡単入門 | taro-nishinoの日記 | スラド

    C++0xが09年までに正式制定が出来ず、先送りになったことは皆さんも御存知だと思います。どういう裏事情があったのか、部外者である私は知りませんし、関心もありません。いいものを作り上げるためにじっくりとやってもいいと思います。 ただ一つだけ言いたいことは、moveコンストラクタだけはもっと早い時期に切り離して、出来れば部分的改訂のC++03に盛り込んで欲しかったという気持ちがあります。少しでも大きなオブジェクトを扱うアプリケーションをC++で書いた経験のある人ならお分かりでしょうが、コピーの高い代償には当に悩まされて来たものです。極端なことを言えば、効率性(実行速度及びメモリ使用率)重視でなければ、あんな難しいC++言語を使うのは阿呆らしいです。ですから、コピーコンストラクタを出来得る限り走らせないよう、工夫しながら書くのは非常なストレスを感じます。しかも、殆どの場合、コピーコンストラク

  • C++0x ラムダから関数ポインタへの暗黙の変換 - Faith and Brave - C++で遊ぼう

    ラムダ式によって生成される関数オブジェクトを、同じシグネチャを持つ関数ポインタへ変換できるようになります。 Windows APIやOpenGLのようなCライブラリとの互換性のための機能ですね。 #include <GL/gl.h> #include <GL/glut.h> int main(int argc, char* argv[]) { glutInit(&argc, argv); glutCreateWindow("Title"); glutDisplayFunc([]{ glClear(GL_COLOR_BUFFER_BIT); glColor3d(1.0, 0.0, 0.0); glBegin(GL_POLYGON); glVertex2d(-0.5, -0.5); glVertex2d(0.5, -0.5); glVertex2d(0.5, 0.5); glVertex2d(

    C++0x ラムダから関数ポインタへの暗黙の変換 - Faith and Brave - C++で遊ぼう
  • C++0x ムーブコンストラクタとムーブ代入演算子を暗黙に定義 - Faith and Brave - C++で遊ぼう

    かなり前から提案は出ていましたが、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 ムーブコンストラクタとムーブ代入演算子を暗黙に定義 - Faith and Brave - C++で遊ぼう
  • Variadic Templatesの解説

    Variadic Templatesである。Variadic Templatesとは、そもそも何か。 Variadic functionというものがある。最も身近な例は、printfである。 int printf ( char const * format, ... ) ; printf( "number: %d, string: %s", 123, "hello" ) ; このように、任意の数の引数をとることができる関数を、Variadic functionという。 Variadic Templatesは、任意の数の、テンプレート引数を取れるテンプレートである。 これまで、型安全に任意の数の引数を取る方法はなかった。もちろん、関数はオーバーロードできる。 template < typename T1 > T f( T1 const & t1 ) ; template < typename

  • プリプロセス時のユーザ定義リテラルについて - melpon日記 - HaskellもC++もまともに扱えないへたれのページ

    C++0x で新しく追加されるユーザ定義リテラルはアンダースコアから始まってないとダメという制約がありますが、これがコンパイル時に問題にならないということは hito さんが書いています(の虫: user defined literalが予約語の制約を無視できる理由)。 でもコンパイル時じゃなくてプリプロセス時ならどうなるの?という話です。 アンダースコア二つから始まる名前と、アンダースコアひとつに大文字から始まる名前は、当然プリプロセス時にも影響してきます。 ということは、 #define __hoge hage というのをコンパイラが予約していた場合、 "bjarne"__hoge というのをユーザが書いた場合、プリプロセス時に __hoge が置換されてしまって、意図しない結果になりそうです。 これは問題だなーとか思っていて、ぼけーっと仕様書を眺めていたのですが、こんなのを見つけま

    プリプロセス時のユーザ定義リテラルについて - melpon日記 - HaskellもC++もまともに扱えないへたれのページ
  • 晴れ時々 C++0x Wiki*

    WIKIは現在仕様策定中の C++0x 言語仕様書の翻訳を、こっそりと堂々行うサイトです。 当WIKI内の内容はあくまでヽ(゚∀。)ノうぇねが私的に行ったものであり、なんら正式に書式化されたものではありません。かなり翻訳として怪しい内容もありますので、基的には原文の補助として参照してください。 また、内容的におかしな場所、言葉、不適切な用語があれば、指摘ください。 現在の作業対象は仕様書草案 N3035 を基準に行っています。 力尽きたら、そっとページを閉じて見なかったことにしてください。 JTC1/SC22/WG21 C++ 標準化作業グループ コメント欄 タイトルは現状 N3000 をベースに作成しています。順次、N3035 に移行します。 -- ヽ(゚∀。)ノうぇね? 2010-03-13 (土) 23:07:43 お、誰か参加してくれている! ありがとうございます。 -- ヽ(

    晴れ時々 C++0x Wiki*
  • 寄付のお願い

    追記:寄付のおかげで形になるまで執筆が続けられました。の虫: C++11参考書の公開:C++11の文法と機能 私のC++0xの執筆活動のため、寄付をお願いします。 Paypal経由での寄付も受け付けています。通貨単位は、日円(JPY)に設定しています。 [終了] 説明 私は今、C++0xの参考書を執筆している。このは、C++0xの新機能はもちろんのこと、既存の参考書で、なかなか説明されることがなかった、名前探索(Name lookup)や、オーバーロード解決(Overload resolution)、テンプレートのインスタンス化(Instantiation)と依存名(Dependent name)といった、言語の規格上の定義を、詳しく説明するになる。また、日人の手によって書かれたとしては、おそらく初めて、規格を参考にして書かれる、総合的な参考書となるはずだ。 私は、既存の日

  • autoの意外な使い方

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