タグ

c++0xに関するharu-sのブックマーク (19)

  • char8_t 欲しい - melpon日記 - HaskellもC++もまともに扱えないへたれのページ

    C++0x からは UTF16 の文字列リテラル(u"...")とその型(char16_t)、UTF32 の文字列リテラル(U"...")とその型(char32_t)が入ります。 そして UTF8 の文字列リテラル(u8"...")も入ります。しかし UTF8 を表す型は入りません。u8"..." は char の配列を返します。 ある関数の引数が "..." と u8"..." のどちらで渡されたのかを区別する方法はありません。残念です。 まあ今更入れろなんて言ったところでどうせ無理だと思うので、諦めて何かうまい方法を探しましょうということで、適当に考えてみました。 struct char8_t { // いろいろ実装 }; const char8_t* u8(const char* str) { return reinterpret_cast<const char8_t*>(str);

    char8_t 欲しい - melpon日記 - HaskellもC++もまともに扱えないへたれのページ
  • C++0x Memory Model 第1回 - 1.9 Program execution - Cry’s Diary

    前回の記事:C++0x Memory Model 第0回 - メモリモデルとは何か 以下では, C++0x プログラミング言語の標準規格として一貫して N3225 を参照しています.文中で (1.9/12) などという表現が出てきた場合は N3225 における条項を指しています. 太字かつ斜字体の言葉 は N3225 で C++0x で定義される用語, 太字の言葉 はブログエントリ中で特別な意味を持たせた用語として定義しているものです. 第1回目のこの記事では,まず,ただ1つの 実行スレッド thread of execution だけを考慮した場合のメモリモデルに関わる基的な事項を説明していきます.複数スレッドが存在する状況下でのメモリモデルに関する説明する上で,単一の実行スレッド内に限定した場合の状況を把握しておくことは必要不可欠なのです. 第0回において,プログラム中にただ1つの

    C++0x Memory Model 第1回 - 1.9 Program execution - Cry’s Diary
    haru-s
    haru-s 2010/12/29
    副作用完了点って言葉がなくなったのか
  • C++0xにすごい変更が来た

    Batavia会議は、だいぶ興味深いことになった。詳しくは、正式なNのペーパーが出てから解説するが、とにかく、非常に重要な項目をふたつだけ解説する。 まず、attributeによって提供されていた多くのクラスのメンバーに関する機能は、キーワードを与えられた。これは、言語機能は、特別な文法を与えるに値するという思想からである。会議でコンセンサスの得られた文法は以下の通りである。 struct Base { virtual void f() { } int x ; } ; struct Derived final explicit : Base { virtual void f() override { } int x new ; } ; 機能はattributeで提供されていたものと全く変わらないので、説明は省く。変更点としては、base_checkのかわりにexplicitを使い、hidi

    haru-s
    haru-s 2010/11/16
    キーワードがずいぶん見やすくなった.newには確かに違和感があるが
  • Embarcadero Blogs - Developer Tools - IDERA Community

    Happy Birthday, Delphi Zum 25jährigen auch ein wenig Text und Anekdoten von mir. Wie bin ich eigentlich zu Borland und Delphi gekommen? Das ist eine lange Geschichte..... eigentlich fing alles mit Paradox für Windows an (1992). Damals habe ...

  • C++WGアドホック会議開催のお知らせ - Faith and Brave - C++で遊ぼう

    先日、C++0xのFCD(Final Committee Draft)が公開され、FCDに対するコメントの募集も開始しました。 FCDは以下からダウンロードできます。 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3092.pdf これに伴い、日国内で出たコメントを議論するC++標準化委員会のアドホック会議を以下の日程で開催します。 日時 : 2010年5月29日(土) 10:00〜17:00 会場 : 赤坂ツインタワー 東館15階 サイボウズ・ラボ 定員 : 一般参加者10人程度(万一応募が多数あった場合は場所の変更があるかもしれません) 前回のアドホック会議参加者の何人かはそのままC++WGにエキスパートとして入ることになったので、 今のところ、前回よりは一般参加枠を少なく設定しています。 参加希望の方は、以下から参

    C++WGアドホック会議開催のお知らせ - Faith and Brave - C++で遊ぼう
    haru-s
    haru-s 2010/04/02
    working group開催
  • C++0x 右辺値参照 std::forward - Faith and Brave - C++で遊ぼう

    前回、std::moveを紹介したが、右辺値参照のためにはもう1つ std::forwardが用意される namespace std { template <class T> struct identity { typedef T type; }; template <class T> inline T&& forward(typename identity<T>::type&& x) { return x; } } まず、右辺値参照(&&)では、参照値(&)も受け取ることができる これがバグの温床になってしまうことがある struct hoge { hoge(int&) {} }; template <class T, class A> shared_ptr<T> factory(A&& a) { return shared_ptr<T>(new T(a)); } int main()

    C++0x 右辺値参照 std::forward - Faith and Brave - C++で遊ぼう
    haru-s
    haru-s 2010/02/24
    これはしなければバグになると思っていいのかな.だとしたら怖いなあ
  • C++0xでは、文字列リテラルから非constなポインタへの変換はできない

    75 :デフォルトの名無しさん:2010/01/15(金) 19:30:19 char *p = "hello world!"; このクソ変換N3000で無くなったんだな 良いことだ C++0x 8の>>75 はて、そうだっただろうか。気になったので調べてみた。 たしか、n3000では、Compatibility Featuresから、Implicit conversion from const stringsが削除されていた。私はこれだけを見て、やはりdeprecatedにするのは無理があったのでやめたのか、と思っていた。 ところが、Standard Conversionsを見ると、Array-to-pointer conversionの項目から、文字列リテラルは非constなポインタに変換できるという項目が、ばっさり削除されているではないか。なるほど、もはやdeprecatedにすらし

    haru-s
    haru-s 2010/01/17
    いい!
  • 本の虫: C++0xの新機能のリスト

    どうやら、C++0xのを執筆することになった。 ふと思えば、今まで一度も、C++0xの新機能がどのくらいあるのかということを考えたことがなかった。規格の変更は、もちろん大量にあるのだが、その中で、特に知っておくべき変更や追加というのは、どのくらいあるのか。整理するために、リストアップしてみた。このリストに載っていない機能や、既存の規格に対する変更で、特にユーザーも知っておくべきものがあれば、知らせて欲しい。 C++0xはまだドラフト段階だが、確実にこれは大きく変わらないだろうという機能は、かなりある。逆に、これはちょっとまだ分からないという機能もある。 言語機能 Rvalue Reference auto delctype static_assert Template Aliases extern template Variadic Templates Initializer lists

    haru-s
    haru-s 2009/12/27
    楽しみじゃ
  • C++0xの本について

    C++0xのを執筆する予定である。詳しいことは何も決まっていない。出版社は技術評論社で、タイトルは、現時点では、「パーフェクトC++0x」ということになっている。技術評論社は、すでに「パーフェクトC#」、「パーフェクトJava」を出しており、今回、そのC++版を出したいらしい。 昨日、参考として、すでに刊行されている二冊の「パーフェクト」シリーズが、無料で自宅に送られてきた。だいぶ分厚いである。ただ、C++も、真面目に書こうとすれば、これだけ分厚くなることは間違いない。 しかし、パーフェクトとは、またずいぶん気負ったタイトルである。「C++入門」でも、「はじめてのC++」でも、「サルでもわかるC++」でもないのだ。 思うに、プログラミングということには、二種類あるとおもう。プログラミング言語の文法と、プログラミングの質的な概念(変数、条件分岐、ループ、サブルーチン、その他アルゴリズム

    haru-s
    haru-s 2009/12/27
    わお.楽しみ.またC++TTみたいにみんなでチェックするのかな
  • rvalue reference 補足

    前回、rvalue reference 完全解説なる記事を書いた所、ある程度の反響を得た。このような個人のブログでは、数人が思う所を書けば、まあ、ある程度の反響と言って差し支えないのである。 しかるに、皆rvalue referenceの理解に苦しんでいる様子だ。果たしてあの解説が至らなかったのであろうか。しかし、あの解説は、これ以上ないくらい簡単に書いたはずである。 実際、value referenceは、名前の通りのrvalueへのreferenceに過ぎぬのだし、std::move()とstd::forward()は、キャストに過ぎぬのだ。std::move()は、rvalueへのキャストであり。std::forward()は、lvalueをlvalueへ、rvalueをrvalueへキャストするのである。それだけのことなのである。 しかし、現実に理解に苦しんでいる者がいる。これは一

    haru-s
    haru-s 2009/11/25
    ありがたい解説.もうなんていうかTeX並の泥臭さがforwardからは臭う.moveはともかく.本当に欲しいものはよしなに計らってくれる機能なんだよね・・・
  • 本の虫: C++0xの新しい乱数ライブラリ、random

    注意:最新ドラフトのN3000のrandomの規定は、コンセプトが却下される前の文面であり、今後、変更があると思われる。 C++は標準ライブラリが貧弱であるとは、よく言われることだ。ことに、乱数に関しては、貧弱の極みである。ご存じのように、C++は、Cから標準ライブラリを引き継いでいる。rand()だ。これは、0からRAND_MAXまでの値を返すと規定されている。RAND_MAXは実装によって異なるが、ほとんどの処理系では、32767である。現代の乱数需要を満たすには、あまりにも小さすぎる。 この状況を打破すべく、C++0xには新しい乱数のライブラリが盛り込まれた。randomである。これはBoostの実装を元にしているのだが、Boostとは少し違っている。今回はそのrandomを、浅く触りだけ紹介しようと思う。というのも、ライブラリの細かなメンバ関数の一つ一つまで説明するのは、甚だ冗長で

    haru-s
    haru-s 2009/11/25
  • 本の虫: lambda 完全解説

    目的 この記事は、C++0xのlambdaを完全に解説せんとする目的を以て書かれた。サンプルコードは最小に留め、エラー処理等は省いた。この記事さえ読めば、今日からlambdaを恐れることなく使う物のC++0xプログラマになれるだろう。 lambdaとは何ぞや lambdaである。あるものは、lambda関数、あるいは無名関数という名称を使っている。いったいlambdaとは何なのか。 lambdaは関数である。また、特に名前はない。したがって、lambda関数、無名関数と呼ぶのは、間違ってはいない。しかしここでは、単にlambdaと呼ぶことにする。 lambdaを定義しよう lambdaは関数オブジェクトである。lambdaは関数オブジェクトである。これはとても大事なので二度書いた。lambdaは関数オブジェクト以外の何物でもない。ところが不思議なことに、皆lambdaが単なる関数オブジェ

    haru-s
    haru-s 2009/11/24
  • 本の虫: rvalue reference 完全解説

    目的 この記事は、C++0xのrvalue referenceを完全に解説せんとする目的を以て書かれた。サンプルコードは最小に留め、エラー処理等は省いた。この記事さえ読めば、今日からrvalue referenceを恐れることなく使う物のC++0xプログラマになれるだろう。 lvalueとrvalueについて Cの時代では、lvalueとrvalueの違いは、代入演算子の左側か右側かという違いだけであった。つまり、left hand value, right hand valueの略である。従って、訳語も、左辺値、右辺値であった。C++においては、これはもはや正しくはない。従って、右辺値、左辺値というのも、誤訳である。それ故に、ここでは、これ以上、左辺値、右辺値という名称を使用しない。 誤解を恐れずにいえば、lvalueとは、明示的に実体のある、名前付きのオブジェクトであり、rvalue

  • C++0xの新機能「ラムダ式」を次期Visual Studioでいち早く試す

    C++0Xの新機能が搭載されたVisual Studio 2010 Microsoftの開発者向け技術情報サイト「MSDN」では、Visual Studio 2010 β1 がリリースされています。IDEがWPFで作られていたり、.NET Frameworkのバージョンが上がっていたりと、Visual Studio 2010では様々な変更/拡張が施されているようですが、C++屋の筆者としては、Visual C++が部分的にせよC++の新規格(通称C++0X)の新しい機能を積極的に取り入れていることが、とても嬉しく思います。 Visual C++ ver. 10に追加されたC++0Xの新機能のひとつ、「ラムダ式(lambda expression)」を少しばかり触ってみましょう。 関数オブジェクトとは C++templateをサポートし、それにあわせてSTLに代表されるテンプレート・ライブ

    C++0xの新機能「ラムダ式」を次期Visual Studioでいち早く試す
    haru-s
    haru-s 2009/09/11
  • n2930: Range-based for loopについて

    n2930: Range-Based For Loop Wording (Without Concepts) 今回、フランクフルト会議でconceptが廃止されたことにより、conceptに依存している機能は、すべてconceptに依存しないように変更しなければならなくなった。Range-based forは、conceptあってこその機能なのだ。concept mapがあるからこそ、既存の型にも、容易にRange-based forを適用できるようになるはずだったのだ。それが、conceptがない今、どうするのか。 答え:ADLを使う。 Range-based forは以下のような構文になっている。 for ( for-range-declaration : expression ) statement これは、コンパイラによって、以下のように変換される。 { auto && __ran

    haru-s
    haru-s 2009/09/01
  • ユーザー定義リテラルに関するポジティブな考察

    思うに、自分は今まで、ユーザー定義リテラルのネガティブな面しか考えていなかったように思う。そこで、ポジティブな面について、考察してみることにした。まず、ユーザー定義リテラルは、単なるシンタックスシュガーであって、パフォーマンス上の利点はない。では、いったいどのように使えば、文法上の利点を得られるのか。 class gram ; gram operator "" _g(unsigned long long int) ; gram operator "" _kg(unsigned long long int) ; gram operator "" _pond(unsigned long long int) ; gram operator "" _kan(unsigned long long int) ; void f() { // ユーザー定義リテラルを使うと、とてもすっきり。 auto we

    haru-s
    haru-s 2009/03/17
  • C++0xのマルチスレッド機能

    はじめに C++の新しい標準規格である「C++0x」の大きな新機能の1つが、マルチスレッド処理のサポートです。 従来のC++では、マルチスレッド機能は標準規格の拡張としてコンパイラごとに提供されていたため、細かな部分がコンパイラやプラットフォームによって異なっていました。しかしC++0xでは、すべてのコンパイラが同じメモリモデルに準拠し、同一のマルチスレッド機能を利用できることになります(ただし、従来同様の拡張をコンパイラが独自に提供することも可能です)。 開発者の立場からすると、マルチスレッドのコードを別のコンパイラやプラットフォームへ移植するときの手間を大きく省くことができます。複数のプラットフォーム向けの開発を行う場合でも、種々雑多なAPIや構文をいくつも頭に入れておく必要がありません。 新しいスレッドライブラリの中心を担うのは、実行スレッドを制御するstd::threadクラスです

    C++0xのマルチスレッド機能
    haru-s
    haru-s 2008/12/02
  • C++の次期仕様「C++0x」のポイント ~Bjarne Stroustrup氏との対話~

    はじめに ソフトウェア業界には現役開発者の立場を保持しながら、ソフトウェアハウスを経営するオーナー社長がいます。彼らは最新の技術動向を観察しながら、組織を引っ張ります。数10年に及ぶ豊富な開発経験と圧倒的な技術力を誇り、組織内ではカリスマ化している人さえいます。開発者と経営者の2足の草鞋を履きこなすのは簡単なことではないでしょう。彼らは相当のプレッシャーを感じながら日々生きているはずです。 連載で取り上げているBjarne Stroustrup氏は、C++を設計しただけではなく、国際標準化委員会活動の先頭に立っています。同氏もプレッシャーの中で生きている一人のはずです。 今回の質問意図 Stroustrup氏はC++発展の歴史を振り返りながら、“C++の設計作業は所属組織の支援を受けることなく、自分独りで始めたものである”と述懐しています(関連情報:豊田孝の「IT談話館」)。辛い孤独な作

    C++の次期仕様「C++0x」のポイント ~Bjarne Stroustrup氏との対話~
    haru-s
    haru-s 2008/11/20
    「むしろ初心者のための拡張がたくさんある」っていう話をインタビュアは知らないのかな
  • 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++で遊ぼう
  • 1