タグ

C++に関するjanus_welのブックマーク (24)

  • C++11: Syntax and Feature

    C++11の文法と機能(C++11: Syntax and Feature) Copyright (C) 2013 江添亮. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GN

  • よく使うC++のイディオム 「NVI」と「RAII」

    CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

    よく使うC++のイディオム 「NVI」と「RAII」
  • C++でfinally

    一部の言語には、finallyという機能がある。あるブロックスコープを抜ける時に、必ず実行される処理を記述することが出来る。 try { // 処理 } finally { // ブロック文を抜けた時に必ず実行される処理 } C++にfinallyがない理由は、特に専用の文法が必要なく、ライブラリで十分なためだ。デストラクターとlambda式を使えばよい。 class scoped_guard { std::function< void() > f ; public : explicit scoped_guard( std::function< void () > f ) : f(f) { } scoped_guard( scoped_guard const & ) = delete ; void operator = ( scoped_guard const & ) = delete ;

  • abstract classで知らなかったこと、付記、派生と継承の違い

    以下のコードはwell-formedである。 struct Non_abstract { virtual void f() { } } ; struct Abstract : Non_abstract { void f() = 0 ; } ; abstractクラスは、abstractクラスではないクラスから派生されることができる。その際、pure virtual functionではないvirtual functionを、pure virtual functionとしてオーバーライドすることができる。 これが何の役に立つのか分からない。ただ、pure virtual functionがあればabstract classであるなどという、あまり文法的に美しくないC++の仕様からすると、わざわざこの挙動を禁止する理由が見当たらなかったのだろうか。 ところで、今まで私は、派生と継承の違いを明確

    janus_wel
    janus_wel 2010/11/28
    付記が main 。おれも混同してたわー
  • 平方根のアルゴリズム

    平方根である。sqrtである。私の数学知識は非常に乏しく、かろうじて平方根の何たるかを解するばかりであるが、ふと、平方根を計算するアルゴリズムが知りたくなった。理由は、constexprなsqrtを実装してみたくなったからだ。 日語では、いい情報がWeb上に存在しないので、ここに書いておく次第。この説明は、私のように数学の知識を持たない人間にも理解できるはずである。 ここで使うのは、バビロニア人の方法(Babylonian method)と呼ばれている、歴史あるアルゴリズムである。この方法は、手動でも、プログラミングでも、非常に簡単に計算できる、大変便利で汎用的なアルゴリズムである。しかも、速度もそれほど遅くない。 √Sに対して、 任意の正の整数を初期値X0と定める(できるだけ平方根に近い値が望ましい) Xn+1を、Xnと S / Xnの平均値とする(平均値は相加平均で求める) 必要な精

    janus_wel
    janus_wel 2010/11/22
    square root algorithm も参考になるんだが、それ以上に loop & side effect version <=> recurssive の変換が
  • 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は、初期化子が定数式の場合、定数式にな

    janus_wel
    janus_wel 2010/11/22
    constexpr パネェな !! const だけだと compile time 定数かどうかとかわからんのだよな
  • 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

    janus_wel
    janus_wel 2010/11/17
    …下位互換性とか実質もうないんじゃね?
  • Xbyak - x86 JIT assembler -

    Xbyak - x86, x64 JIT assembler - .frame(English) .frame(x86の究極の最適化手法?) Xbyak(カイビャック)はx86(IA32), x64(AMD64, x86-64)のマシン語命令を生成するC++のクラスライブラリです. プログラム実行時に動的にアセンブルすることが可能なため, 柔軟な最適化(動的コード生成)が可能となります(利用シーン:量子化の高速化, 式の計算). 暗号ライブラリに使って高速な実装をしてみた(very fast etaT pairing for Core 2 Duo) ヘッダファイルオンリー xbyak.hをインクルードするだけですぐ利用することができます(32bit, 64bit両対応). Windows Xp(32bit, 64bit), Vista/Linux(32bit, 64bit)/Intel

    janus_wel
    janus_wel 2010/09/25
    JIT ですよ JIT !!
  • 本の虫: 多くのプログラマは言語を表面的な理解だけで使っている

    一般のプログラマの多くは、プログラミング言語というものを、ごく浅い表面的な理解だけで使っている。これは、いわゆる「入門書」によるところが大きい。入門書は、言語をできるだけパターンで教えようとする。かくかくしかじかの場合には、とらとらうまうまのように書いておけばいい、などといった具合だ。 たとえば、配列の全要素や、aggregateの全メンバーをゼロで初期化したいとする。多くのC++プログラマは、以下のように書く事であろう。 int a[100] = {0} ; このコードは、正しく動く。配列aの要素は、すべてゼロで初期化される。しかし、C++という言語を考えた場合、{0}と書く必要はない。空の{}で十分なのである。 int a[100] = {} ; では何故、多くのC++プログラマは{0}と書くのか。それは、多くの参考書が、そのように書いているからに過ぎない。大多数のC++プログラマは、

    janus_wel
    janus_wel 2010/09/18
    「議論する前に仕様嫁」てのは同意だけど C++ の仕様書が利用しやすいかというと個人差があるのでつまりわかりやすい説明期待してます
  • aggregateと初期化リストの不思議

    ちょうど今、initializerの項目を執筆している。この部分は、結構難しい。分かりやすく説明しようとすれば、不正確になってしまうし、規格に忠実であることを求めると、規格のように無味乾燥とした、正しいが分かりにくい文章になってしまう。 このため、なかなか執筆が進まないのだが、このままではいけないので、ともかくこのブログで、何か解説をしてみようと思う。 たまたま2chのスレで、aggregateの話題が出ているので、これについて、なかなか複雑な部分を、解説する。 C言語では、配列や構造体(C言語の用語)を初期化リストで初期化できた。 struct Foo { int x ; int y ; } ; struct Foo foo = { 1, 2 } ; 同じことは、C++でもできる。ただし、C++には「構造体」というものはない。すべて、クラスである。C++では、ある特殊な制限を満たした配列

    janus_wel
    janus_wel 2010/09/10
    わかりやすい
  • C++ Final Draft International Standard

    Programming languages --- C++ Languages de programmation --- C++ ISO/IEC JTC 1 Secretariat: ANSI Voting begins on: 1998-04-23 Voting terminates on: 1998-06-23 In accordance with the provisions of Council Resolution 21/1986, this document is circulated in the English language only. PRODUCTION NOTE: The dates in the headers of this FDIS, which currently read "1997", will be changed to "1998" bef

    janus_wel
    janus_wel 2010/03/01
    [ISO/IEC] C++98 の final draft 。無償で閲覧できるのがうれしい
  • cplusplus.com - The C++ resources network

    Tutorials C++ Language: Learn this versatile and powerful programming language. Includes detailed explanations of pointers, functions, classes and templates, among others... Reference Description of the most important classes, functions and objects of the Standard Language Library, with descriptive fully-functional short programs as examples. Browse the C++ Reference Articles User-contributed arti

    janus_wel
    janus_wel 2010/02/26
    STL の reference はここがいいかも
  • ISO/IEC JTC1/SC22/WG21 - The C++ Standards Committee - ISOCPP

    janus_wel
    janus_wel 2010/02/22
    [ISO/IEC JTC1] C++ 標準策定の WG
  • Return value and constructor

    戻値とコンストラクタの妖しい関係 C++ では、関数の引数として、ユーザが定義したクラスのオブジェクトが 必要な場合は、たいてい、リファレンスを使う。 そうしないと、引数用に一時オブジェクトが生成され、 オブェクトのコピーが発生するからである。リファレンスを使えば、 一般的にはオブジェクトのアドレスが渡されるだけなので、オブジェクト 全体をコピーするよりはるかに効率的だ。 関数引数はリファレンスで渡すというのは、まあ、常識の部類であろう。 では、関数からの戻値としてオブジェクトを返す必要がある場合はどうだろうか。 オブジェクトが保持している属性値を返すようなときは、 const 修飾子を付けた上で、リファレンスで返すのが普通だろう。 その属性値を含むオブジェクト自身を呼び出し側が保持しているので、 アドレスだけ返しても特に問題はないからだ。 では、新しくオブジェクトを生成して返さなければな

    janus_wel
    janus_wel 2010/02/22
    RVO の順を追った説明
  • 数列辞典

    The page you're looking for has moved, been replaced, or is currently unavailable to view. If you previously bookmarked a page and have now reached this message, check to make sure the link was not shortened, or go to our home page to find the page from there. We've been upgrading this site. If you selected a link on our site and reached this message, use the Back button to return to the previous

    数列辞典
    janus_wel
    janus_wel 2010/02/22
    glossary というより index という感じ
  • C++ Glossary

    このページについて C++関係の話に出てくる言葉で、「読んで字の如し」 とはいかない難解語の簡単な解説を並べてみました。Glossaryというより、 むしろ略語辞典になってしまいました。巷で見かけた単語を並べているだけなので、 実際の所ほとんど使われない略語もあったりするかもしれません。 ちゃんとした用語集は Bjarne Stroustrup's C++ Glossary などをご覧になることをオススメします。 用語集 ADL (Argument Dependent name Lookup) 引数に依存した名前の探索。 Argument Based Lookup, Koenig Lookup とも呼ばれる。 #include <iostream> #include <string> ... std::string s; std::cout << s << std::endl; // os

    janus_wel
    janus_wel 2010/02/22
    ハナシするための材料
  • Custom manipulator for C++ iostream

    I'd like to implement a custom manipulator for ostream to do some manipulation on the next item being inserted into the stream. For example, let's say I have a custom manipulator quote: std::ostringstream os; std::string name("Joe"); os << "SELECT * FROM customers WHERE name = " << quote << name; The manipulator quote will quote name to produce: SELECT * FROM customers WHERE name = 'Joe' How do I

    Custom manipulator for C++ iostream
    janus_wel
    janus_wel 2010/02/19
    直後に流し込んだ data を加工する manipulator の作り方
  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

    janus_wel
    janus_wel 2010/02/19
    わかりやすい。これの object 生成関数を class にしたものが Factory Method pattern
  • プログラミングメモ - std::auto_ptr の考え方とか

    std::auto_ptr が使いづらいという話を時々聞いていて,代わりに,参照カウンタ付きの boost::shared_ptr が便利だよ,という話もよく聞きます。たしかに,少し遅いものの,参照カウンタ付きのポインタってのは便利です。 一方で,std::auto_ptr は,考え方(設計思想)がいまいち分かりづらいから,不便だとか言われちゃうのかな,とも。例えば,こちらの話のような。コードはリンク先を参照してください。 auto_ptrはそのままポインタ型(BIGSTRUCT*)としては渡せず、 get()関数を呼ぶ必要があります。イヤですね。透過的でありません。でも、これは意図的なのです。 (snip) bar()内では、 引数として渡されたptrから新しいptr_barにメモリのアドレスが渡されます。しかしこれがくせ者で、 bar()から抜けるときにはこのptr_barが削除されて

    janus_wel
    janus_wel 2010/02/19
    「誰が持っているのか」がわかりやすい。使うには「貸し出す」という概念も必要か
  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

    janus_wel
    janus_wel 2010/02/18
    pointer に限定した型変換の code がステキ