タグ

ブックマーク / cpplover.blogspot.com (10)

  • 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

    nharuki
    nharuki 2010/11/16
    「文脈依存キーワード」と「暗黙のコピーコンストラクターの扱い」
  • range-based forの興味深い使い方を発見した

    初期化の部分を執筆中に、ふと、range-based forの面白い使い方を思いついた template < typename ... Types > void f( Types ... args ) { for ( auto value : { int(args)... } ) { std::cout << value << std::endl ; } } int main() { f( 1 ) ; f( 1, 2, 3 ) ; f( 1, 2, 3, 4, 5 ) ; } range-based forには、初期化リストを渡せる。初期化リストには、引数パックを使うことができる。ということは、わざわざ再帰的なアルゴリズムを使わずして、Varidic Templatesを使った可変引数をすべてforで回せるのである。int型にキャストしているのは、Variadic Templatesは、そ

  • 本の虫: lambda 完全解説

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

  • 本の虫: rvalue reference 完全解説

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

  • post Rapperswil mailingが公開された

    ISO/IEC JTC1/SC22/WG21 - Papers 2010 最新ドラフトは、N3126になった。もっとも、このドラフトには、今回のRapperswill会議で、変更すべきだと決定された変更の全ては含まれていない。まだ、細かい文面を考案中だからだ。 また変更点を確認して、いま執筆中の参考書の、すでに書き終えた部分との齟齬を確かめる作業が始まる。 N3103: Security impact of noexcept 単なる例示のためのペーパー。noexceptとマークされた関数が、例外を外に投げた場合、直ちにterminateする。このルールが守られない場合、具体的なある実行環境で、セキュリティ上の問題を引き起こす。したがって、かならず実装はterminateしなければならない。 N3106 min/max/minmaxにおける、文面の変更間違いの修正。 N3108 std::b

    nharuki
    nharuki 2010/08/29
    ドラフトの改訂版や新規のペーパー・修正提案の概要
  • 原文Bjarne Stroustrupへのインタビュー

    新しいプログラミング雑誌、プログラミングの魔導書 vol.1では、C++の設計者にして最初の実装者であるBjarne Stroustrupへインタビューを行った。インタビューは、英語が使われた。その英語は、日語に翻訳されて、雑誌に載せ、すでに発行されている。 しかし、翻訳というものを信用していない人もいるだろう。第一、ほかならぬ私自身でさえ、翻訳は嫌いなのだ。このたび、Bjarne Stroustrupが、自信のWebサイトで、原文を公開した。以下で落として読むことができる。 Stroustrup: Interviews Interview by Royo Ezoe C++0x from now to the release of the Standard for a new Japanese mazagine called Programmers' Grimoire. April 20

    nharuki
    nharuki 2010/08/17
    実に耳が痛い内容です…
  • お前にSunが救えるか?

    お前にSunが救えるか? Oracle、「分からぬ、だが特許ゴロにはなれる」 Oracle(Sun Microsystemsを買収)は何がしたいんだろう。結局、Sunの実装がAndroidに勝てなかったというだけじゃないか。自分の粗悪な製品を棚にあげて、特許訴訟を起こす。愚かなことこれに過ぎたるはない。旧Sunの社員の多くがGoogleに引きぬかれていったのも、当然というわけだ。 ともかく、これで、Oracleはモバイル市場を完全に敵に回したわけだ。もう立つ瀬はない。 しかし、Javaはよく分からない。Microsoftが独自のJavaVMを開発したとき、Sunは訴訟を起こした。そこでMSは、独自のJavaVMを取り下げた。結局MSは、Javaが占めるべきだった場所の大半を、C#に置き換えてしまった。Sunが馬鹿なことをしたせいで、来労せずして得べかりしユーザーを失ったわけだ。今回も

    nharuki
    nharuki 2010/08/16
    "C++の標準化の際には、この問題を避けることに多大な努力を払った。もし当時、AT&TやBjarne Stroustrupなどが、C++の権利を主張していたら、今日のC++の興隆はなかっただろう"
  • 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にすらし

    nharuki
    nharuki 2010/08/05
  • 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

    nharuki
    nharuki 2010/07/15
    Variadic Templates=可変長引数テンプレート
  • C++プログラマのレベル10

    レベル0 C++とかいう、Cにヘンテコな機能を付け加えた言語があることはしっているが、ワケ分からんので勉強する気にならない。 Cの何が不足なのか分からない。 C++についてググったり、入門書を読んだりしてみる。文法はCに後から無理やり付け加えた感じだ。 でも文法がわかりにくすぎる。 レベル2 vectorとか便利すぎて涙がでる。もういちいちrealloc()を呼び出さなくてもいいんだ。でもイテレーターとかいうのが、ワケ分からんので、ポインタを使っている。 構造体の中に関数を書けるのは便利かもしれない。すくなくとも、わざわざ構造体のポインタを引数に渡さなくてもいいわけだ。 レベル3 テンプレートが分からなくて挫折中。テンプレートがわかれば、STLがもっと分かるようになる気がする。でも、いい参考書が見つからない。 継承とか仮想関数も便利だと気がつく。namespaceも地味に便利だ。 レベル4

    nharuki
    nharuki 2010/02/08
    レベル5.5あたり
  • 1