タグ

c++とc++0xに関するgfxのブックマーク (12)

  • unique_ptr C++03 emulation

    Howard E. Hinnant 2009-01-02 unique_ptr Emulation for C++03 Compilers Download header here: unique_ptr.hpp Download header and tests here: unique_ptr.zip unique_ptr is a class template smart pointer currently in the C++0X CD1 draft. It is intended to be a safer and more flexible replacement for auto_ptr. It represents sole (unique) ownership of a resource such as memory (like auto_ptr).

    gfx
    gfx 2010/11/26
  • gccにconstexprが実装された

    GCC 4.6に、constexprが実装された。constexprについては、特に難しいことはない。単に、関数やクラスを、コンパイル時定数にできるというだけの話である。ともかく、せっかくなので使ってみる。この機能は、細々と解説するより、実際にコードを示したほうが分かりやすいであろう。 まずは、constexprな変数である。 int main() { constexpr int a = 0 ; // OK int value = 0 ; constexpr int b = value ; // エラー const int c = value ; // OK } constexpr指定された変数は、必ずコンパイル時定数になる。変数の初期化子は、定数式でなければならない。constとの違いは、constはコンパイル時定数でなくてもよいのである。constは、初期化子が定数式の場合、定数式にな

    gfx
    gfx 2010/11/17
  • deleted definitionによるクラスの初期化の制御

    bool型で初期化したいクラスがあるとする。 struct Boolen { Boolen( bool ) { } } ; 残念ながら、このクラスは、あまり宜しくない。なぜならば、C++には、忌々しい暗黙の型変換というものがあるからだ。 int main() { Boolen a = true ; // OK、当然だ Boolen b = 123 ; // OK、ハァ? Boolen c = &a ; // OK、おいおい、おかしいだろ常識的に考えて } このような馬鹿げたコードは、コンパイルエラーになって欲しい。もし、数値やポインターをboolとして扱いたいのであれば、明示的にキャストするべきなのだ。 int main() { Boolen a = true ; // OK、当然だ Boolen b = bool( 123 ) ; // 自分が何をしているのかは十分承知している Bool

    gfx
    gfx 2010/09/06
  • GC in C++0x

    2. 自己紹介  氏名: 新 康孝 (あたらし やすたか)  Twitter ID: yak_ex  Web: http://yak3.myhome.cx:8080/junks  C++ / Perl が主戦場  某自動車部品メーカーから某自動車メーカーへ出向中  現在、仕事でコードに触れていない  競技プログラミングTopCoder、Codeforces)で 潤い補充  GC は「ど素人」 3. 渡る世間は GC ばかり  Google Code Jam 2010 Qualifier 使用言語 1位 C++ 4911 6位 Ruby 221 2位 Java 2762 7位 PHP 170 3位 Python 1459 8位 Perl 146 4位 C 751 9位 Haskell 118 5位 C# 648 10位 Pascal 95 4. 渡る世間は GC ばかり

    GC in C++0x
    gfx
    gfx 2010/08/09
  • 『プログラミングの魔導書 〜Programmers' Grimoire〜』がすごいのです - moriyoshiの日記

    すでに多くの方がご存知のことと思いますが、株式会社ロングゲートからまもなく『プログラミングの魔導書 〜Programmers' Grimoire〜』が発刊されます。 発売前レビューをするということで、id:faith_and_brave さんより PDF を頂戴していたのですが、まったく自分の役割を自覚していなかった (内容のチェック的なものかと思ってました) ので、予約締切間近 (8/6、つまり明日までです!) ですが、ちょっと紹介させてもらいますね。 Bjarne Stroustrupへのインタビュー デンマーク生まれの長男で髪の毛が年々少なくなっているというビャーネ・ストロストォプさんへのインタビューです。インタビュワーは、丸刈りで丸刈りでC++が好きで「の虫」というブログを執筆されている、江添さんです。 C++0xの現況をざっくり把握するのに、どこを見るのが一番なんだろうか、と悩

    『プログラミングの魔導書 〜Programmers' Grimoire〜』がすごいのです - moriyoshiの日記
    gfx
    gfx 2010/08/06
  • C++0xの中でいらない機能

    私は、C++0xのすべてに賛同しているわけではない。むしろ逆に、不満は多い。オレの欲しかったこの機能がないという不満ではない。こんな機能いらないだろという不満である。 ユーザー定義リテラル ユーザー定義リテラルは、無駄である。識別子はかならずアンダースコアから始まらなければならない。これは、とても危険だ。なぜ、予約語の制限を無視できるかというと、ユーザー定義リテラルの識別子は、エンティティではない。すなわち、名前ではないからだ。名前ではないゆえに、予約語の制限にはあてはまらない。 ましてや、ユーザー定義リテラルを、名前空間の中に入れることができないというのは、致命的だ。もちろん、名前空間の中でも定義できるが、おそらく、実用にならないだろう。 それに、ユーザー定義リテラルでなければできないことというものがない。では、単なるシンタックスシュガーか。 // ユーザー定義リテラル auto x =

    gfx
    gfx 2010/06/08
    "ong long intは、C99から輸入したものである。C畑の連中の考えることは、たいていクソである。"
  • initializer listの解説

    C++の思想の一つに、組み込み型と、ユーザー定義型との、区別をなくすという理念がある。したがって、C++では、組み込み型だろうか、クラスだろうが、自動ストレージ、静的ストレージ、動的ストレージ上に、構築できるし、演算子をオーバーロードできる。C++の多くの機能が、組み込み型とクラスとの、区別をなくすよう、考案されてきた。 C++では、配列や構造体の初期化に、特殊な構文を使える。 int x[3] = { 1, 2, 3 } ; struct Foo { int i ; double d ; } ; Foo foo = { 123, 3.14 } ; これは、クラスでは、使えなかった。C++0xでは、これができるようになる。 とはいうものの、これは、特に解説を要するほどのものでもないのだ。 まず、この{}による初期化式を、リスト初期化という。ユーザー定義のコンストラクター、privateやp

    gfx
    gfx 2010/03/21
  • 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

    gfx
    gfx 2010/03/07
    new auto(42) と new int(42) は同じ
  • C++0x基礎文法最速マスター - Faith and Brave - C++で遊ぼう

    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基礎文法最速マスター - Faith and Brave - C++で遊ぼう
  • 本の虫: シンタックスシュガーとしてのlambdaの解説

    の虫: lambda 完全解説で、lambdaの全機能は、ほぼ網羅したと思う。lambdaの文法は、それほど難しくはないと思うのだが、難しいと感じる人がいるらしい。とくに、キャプチャが理解できない人がいるそうだ。そこで今回は、lambdaの根を解説してみようと思う。 lambdaというのは、そもそも関数オブジェクトのシンタックスシュガーなのである。例えば、 namespace hito { template< class InputIterator, class Function > Function for_each( InputIterator first, InputIterator last, Function f ) { for ( ; first != last ; ++first ) f( *first ) ; return f ; } } int main() { st

  • 本の虫: lambda 完全解説

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

  • C++0x 標準コンテナのsize()の計算量を規定 - Faith and Brave - C++で遊ぼう

    標準コンテナのsize()メンバ関数の計算量を全てO(1)にしようという提案があり、 賛成多数で通ってしまったらしいです。 つまり、サイズ用のメンバ変数を持たずに実装されていたstd::listやstd::set等に サイズ用メンバ変数が新たに追加されることになります。 組み込み環境でSTL使ってるところがコンパイラをアップデートしてC++0xに対応すると メモリ不足で動かなくなる可能性があるのですが、そのへん考慮されているのだろうか。 以下、N2920の投票結果から 我々は、C++0X working paperにN2923 "Specifying the complexity of size() (Revision 1)"を適用する。 Crowlは、これによってABIが破壊的に変更されるかどうか尋ねた。 Hinnantは、実装に依存すると返答した。いくつかの実装は変わるだろう。 Bro

    C++0x 標準コンテナのsize()の計算量を規定 - Faith and Brave - C++で遊ぼう
    gfx
    gfx 2009/09/02
  • 1