タグ

C++11に関するyowanoのブックマーク (21)

  • C++11時代におけるクラスの書き方 - イグトランスの頭の中

    記事は、C++11 Advent Calendar 2011 : ATNDの2日目の記事です。 C++のclassは様々な使い方ができます。後発のほかの言語ではいくつもの概念に分かれているものも、C++ではすべてclassということもあります。 そこで、C++でclassを定義する際も、classと一括りにせず、自分がいったいどんなclassを書こうとしているのか明確に意識するとよいのではないだろうかと考えました。そのために、私なりのclassの分類をまとめ、この記事を書くことにしました。 これは、各々のプログラミング言語の経験により違いが出ることと思います。異論もあると思いますので、ご自身でも考えてみるとよいと思います。 以下、この記事では4種類に分類しています。 1つ目は「オブジェクト指向プログラミング (OOP) を実現するクラス」です(長いので以下OOPクラスと略します)。 vi

    C++11時代におけるクラスの書き方 - イグトランスの頭の中
    yowano
    yowano 2014/12/25
    クラスを、OOPクラス、インターフェース、Mix-in、データ抽象の4つに分けて考え、C++11でのそれぞれの書き方に関する解説。
  • 暗黙のmoveとNRVO - joynote break;

    VS2010(VC10)にて関数で返す値についての扱いをついったーで突っ込まれて実際書いて確かめた時のメモ。 #include <iostream> #include <vector> #include <boost/timer.hpp> struct Test{ std::vector<int> tmp; Test(){ std::cout << "コンストラクタ" << std::endl; } ~Test(){ std::cout << "デストラクタ" << std::endl; } Test(const Test& obj) : tmp( obj.tmp ){ std::cout << "コピーコンストラクタ" << std::endl; } Test(Test&& obj){ std::swap(tmp,obj.tmp); std::cout << "ムーブコンストラクタ" <

    暗黙のmoveとNRVO - joynote break;
    yowano
    yowano 2014/05/13
    NRVOはreturnが複数ある場合などには効かないが、C++11では関数内で宣言された変数が返り値になった場合は暗黙的にmoveされる。ただ、暗黙変換が絡む場合はやはりmoveも起きない。
  • 何が lvalue で何が rvalue なのか - iorate's blog

    こういう記事も必要かもしれないと思いました.内容はタイトルそのままです. はじめに はじめに,と書きましたがこの項は飛ばしても問題ないです. まず "lvalue" とか "rvalue" とかいうものが何についての概念なのかということですが,これらは C++ の "式" の持つ属性 "value category" の値です."式" には他に "型" という属性があります. int i = 0; i; // 式 i の型は int,value category は lvalue 0; // 式 0 の型は int,value category は rvalue 型の決め方は難しくないと思うので (たぶん),この記事では value category の決め方を書きます.以降,"i は int の lvalue である" といった言い方をします. Lvalue,rvalue のイメージ い

    何が lvalue で何が rvalue なのか - iorate's blog
    yowano
    yowano 2014/05/13
    prvalueや、xvalueといった概念についても触れている。pvalueが従来通りのlvalueなら、xvalueはrvalueへの参照のこと。
  • 規格書を読もう - How to disappear completely

    この記事はC++ Advent Calendar 2012の参加記事です。 初めに みなさんはC++を書いているときに分からないことが有ったらどうやって調べているでしょうか。 おそらくブラウザの検索窓に「C++ ポインタ」とか「C++ テンプレート」とか「C++ 闇」とかカチャカチャ入力してエンターキーをッターン!してるでしょう。僕もです。 C++やBoostについて書いているサイトは日語でもたくさんありますし、とてもありがたいことに、包括的に解説してくれているところさえ有ります。非常に重宝します。 さて、C++を勉強していきSTLやBoostなんかも使い始め、寝ても覚めてもC++のことが頭から離れなくなってきたのであれば、C++について調べる方法として、C++の規格書を選択肢に加えるのもいいかもしれません。 C++の規格書とは、プログラミング言語 C++を定義し、この言語を実装する実装

    規格書を読もう - How to disappear completely
    yowano
    yowano 2014/05/05
    規格書を参照するべき理由と、規格書(草案)の置いてある場所のリンク、規格書内の目次の解説など。
  • 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

    yowano
    yowano 2014/04/22
    販売もされているC++11の参考書を作者が無料で公開しているもの。購入することが望ましい。
  • ドワンゴに入社した

    そう。タイトル通りだ。筆者、江添亮はドワンゴに雇用された。一体、どのような経緯でドワンゴに入社するに至ったのか。また、どんな仕事をしているのか。それを説明するには、時系列を追って書いたほうがいいだろう。 2013年8月21日 ふとみると、以下のようなサブジェクトのメールが届いていた。 【ご相談】ドワンゴ主催の C++11, 14 に関する勉強会にスピーカーとしてご参加頂けないでしょうか C++11? C++14? なんと、日C++14などという単語を知っている企業があったのか。しかし・・・ドワンゴ? SPAMだろうか。いや、こんなにピンポイントなSPAMがあるわけがない。 それにしても解せないメールだ。ドワンゴといえば、もちろん、あの有名なニコニコ動画の企業だ。ニコニコ動画と言えばWebサイトだ。ニコニコ動画やその関連サービスの開発にC++を使っているのだろうか。いやまて、たしか子会社

  • 右辺値参照とムーブセマンティクス - 株式会社CFlatの明後日スタイルのブログ

    資料だけならWeb上に多かれど、いまいちピンとこないのがこの2つの機能ではないかと思います。大体この2つはセットにして語られるので、どこからどこまでが右辺値参照の機能でどこからどこまでがムーブセマンティクスの機能なのかを混同してしまう、ということも理解の混乱に拍車をかけている気がします。私だけかもしれませんが。 ●右辺値参照 そんなわけで明らかにしておきたい事は、つまりはこういうことです。 右辺値参照は、あくまでも「単なる参照」であり、右辺値参照=ムーブコンストラクタを呼びだすための機能、ではない 右辺値参照は、あくまでも「単なる参照」であり、Hoge &&piyo = hoge; とすればHogeのムーブコンストラクタが呼び出される、というわけではない ※ 2013/01/23:faith_and_brave様のご指摘を受けて、表現を変更いたしました。 右辺値参照も、基的にはただの参照

    右辺値参照とムーブセマンティクス - 株式会社CFlatの明後日スタイルのブログ
    yowano
    yowano 2014/01/06
    『一時変数を右辺値参照した場合、その一時変数の寿命は右辺値参照変数の寿命と一致する(一時変数へのconst参照の場合も同じ)』『右辺値参照変数自体は、右辺値ではなく左辺値である』
  • C++0xの新機能、finalとoverride

    gcc 4.7は、finalとoverrideを実装している。 finalとは、クラスの派生と、virtual関数のオーバーライドを禁止するための機能である。 struct B final { } ; struct D : B { } ; // エラー struct C { virtual void f() final { } } ; struct D : C { void f() { } // エラー、C::fはオーバーライドできない } ; これ以上説明する必要がないくらいに分かりやすい機能だ。現実的には、最底辺の基クラスのvirtual関数のオーバーライドを禁止にするということはない。なぜならば、それは普通の関数とほぼかわりないからだ。あえて言えば、派生クラスで、同じシグネチャの関数を定義できなくする程度の意味しかない。大方、以下のような目的に使われるだろう。 struct A {

    yowano
    yowano 2014/01/06
    『virtual関数をオーバーライドするさいには、virtualキーワードは必要ない』『void f() final override { }』この2つが自分にとって重要だった。
  • Visual C++で使えるC++11

    身内向けですがせっかく作ったので。 土日に深夜のテンションで作ったので抜け漏れ誤字脱字だらけだと思います…Read less

    Visual C++で使えるC++11
  • 「Visual C++ Compiler November 2012 CTP」で追加された6つの新機能

    はじめに 昨年の末、新たなVisual C++がリリースされたことにお気づきでしょうか。 Visual C++ Compiler November 2012 CTP(以下、Nov2012CTP) CTPとはCommunity Technology Preview、要するにお試し版、正式なupdateまでの"つなぎ"なので実プロジェクトで使うわけにはいかないけども「次版の予告編として提供するから遊んでみてね。ついでに不具合見つけたら教えてくれるとうれしいな♪」的なリリースです。 Nov2012CTPで提供されるのは、コンパイラ体とヘッダが一。Visual Studio 2012にadd-inする形式で、CTP単体ではインストールしても無意味です。Visual Studio 2012(無償版:Expressも可)がインストールされた環境でCTPをインストールするとVisual C++プロ

    「Visual C++ Compiler November 2012 CTP」で追加された6つの新機能
    yowano
    yowano 2013/11/06
    『CTPとは、Community Technology Preview、要するにお試し版、正式なupdateまでの"つなぎ"なので実プロジェクトで使うわけにはいかない』とのこと。知らなかったのでメモ。
  • 最新のconstexpr

    constexprは何度も解説しているが、だいぶ昔のドラフトを元にしていたので、正式な規格とはずれている。今書いている参考書はもうしばらく時間がかかるので、とりあえずその間をつなぐために、constexprについて解説する。 constexpr変数 constexpr指定子をつけてリテラル型の変数を宣言すると、その変数はコンパイル時定数になる。変数の初期化式はコンパイル時定数でなければならない。 void f() { constexpr int x = 10 ; // OK、コンパイル時定数 int r = 0 ; constexpr int error = r ; // エラー } constexpr指定子をつけて関数を宣言すると、constexpr関数になる。constexpr関数は、コンパイル時に評価される。ただし、constexpr関数にはとても厳しい制限がある。 まず、仮引数の型

  • constexpr を使うべき5の理由 - まとめ&リンク集 - ボレロ村上 - ENiyGmaA Code

    「constexpr を使うべき5の理由」の連載をひとまず終えたので、記事の一覧をここにまとめておきます。 また、その他の資料や情報へのリンクを載せておきますので、更に興味あるという方は読んでみるのもよいでしょう。 constexpr を使うべき5の理由 1.定数を明示的にコンパイル時定数にする なぜあなたは const 修飾よりも constexpr 指定をするべきか。 2.定数を返す関数をコンパイル時定数にする 「市民、あなたは constexpr ですか」 「もちろんです、C++。constexpr であることは市民の義務です」 3.副作用がないことを保証する 参照透明な世界に行きたい。 4.あのうんざりするテンプレートメタプログラミングによる数値計算からはもはや解放された 型には TMP、値には constexpr。 5.必要なものをなるべく早く用意しておくために 「C++ のこと

    constexpr を使うべき5の理由 - まとめ&リンク集 - ボレロ村上 - ENiyGmaA Code
    yowano
    yowano 2013/11/05
    C++11で実装された、constexprの利点の解説まとめ。
  • C++11 における enum のまとめ - spinorのブログ

    後で忘れた時に、すぐに思い出せるようにメモ。ソースはFDIS(N3290)です。正式な規格書が FDIS と異なっていたら、すみません。 2種類の enum C++11 では、2種類の enum が用意されている(7.2p2)。 unscoped enumeration … お馴染みの C++03 でも活躍した enum scoped enumeration … 新規格 C++11 で新たに導入された enum で、いわゆる scoped and strongly typed enums 宣言(7.2p1) 実体宣言 unscoped enumeration は次のような感じ: enum identifier1 : long { enumerator1, enumerator2, enumerator3 = 100, enumerator4, // このカンマは C++03 では ill-

    C++11 における enum のまとめ - spinorのブログ
    yowano
    yowano 2013/11/05
    C++11で実装された、scoped enumerationの解説。名前空間を汚さず、より安全に列挙された値を扱うことができる(名前衝突を避けることできる)ところが最大の特徴。
  • 久々にC++使ったら進化してて素敵になってた件 – taichino.com

    最近、数年ぶりにC++を触っているのですが、いつの間にかかなり使いやすくなっていました。まだ全容は把握できてないのですが、とりあえず印象に残った以下の項目について書いてみたいと思います。 BOOST_FOREACHとautoですっきりループ tupleで無くなる無駄な構造体 #pragma onceで楽々インクルードガード std::functionとlamda関数でコンパクトなコード typeidでリフレクション 主にC++0x周りの話だと思っていますが、勘違いしている可能性も高いです。 前置きですが、エントリ内のコードはすべてgccの4.5.0で動作確認を行っています。(mac portのgcc45パッケージをインストールしました)。またビルド時にはc++0xの使用を明示する必要があります。 $ g++-mp-4.5 -std=c++0x main.cpp 1. BOOST_FORE

    yowano
    yowano 2013/10/09
    autoとfor_each、tuple(pairの要素がn個版)、#pragma once、std::functionとlamda関数、typeidについての簡単な解説。
  • 本の虫: lambda 完全解説

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

  • 本当は怖くないムーブセマンティクス - yohhoyの日記(別館)

    この記事はC++ Advent Calendar 2012の15日目にエントリしています。 内容はC++11「ムーブセマンティクス」の入門記事となっています。 もくじ ムーブセマンティクス再考 シンタックス vs. セマンティクス コピー vs. ムーブ ムーブのもつ2つの意味 C++11のムーブセマンティクス対応 auto_ptrからunique_ptrへ auto_ptrの暗い過去 unique_ptrへの移行 std::moveの役割 ムーブセマンティクスを使おう C++11標準ライブラリとムーブ ムーブ"後"の中身は? ムーブを利用して関数を書く (文のみ約9500字) まえがき To move or not to move: that is the question. ― Bjarne Stroustrup, 2010(改)*1 プログラミング言語C++の新しい国際標準規格*2

    本当は怖くないムーブセマンティクス - yohhoyの日記(別館)
    yowano
    yowano 2013/08/30
    『右辺値参照を用いたテンプレート関数の自作や、右辺値参照に対応したクラスの自作は行わない』という前提を掲げ、『ムーブセマンティクスを利用するだけ』という観点からのみの解説。物凄く丁寧で分かりやすい。
  • 本の虫: rvalue reference 完全解説

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

  • ポインタは用法用量を守って正しくお使いください - kikairoya’s diary

    yowano
    yowano 2013/08/28
    C++11で実装されているスマートポインタのまとめ。かなり分かりやすい。
  • スマートポインタの使い方 その1:unique_ptr - C++Builder好きの秘密基地

    スマートポインタって何? C++において、operator newでメモリ領域(ヒープ領域)を動的に確保した場合、その領域はoperator deleteでプログラマが責任を持って解放してやらなければならない。しかし、deleteを書き忘れたり、例外が発生したときの処理を怠った場合など、それが正しく行われないことはよくある。正しく解放されなかった領域はOSやプロセスが使用可能なメモリ領域を「不正占拠」し、それが積もり積もると、OSやプロセスが停止する場合がある。 #include <memory> class Mess {}; void f(Point p1, Point p2) { Rectangle* r(new Rectangle(p1, p2)); r->rotate(45); // 矩形を45度回転 // ... if (in_a_mess) throw Mess(); // 例

    スマートポインタの使い方 その1:unique_ptr - C++Builder好きの秘密基地
    yowano
    yowano 2013/08/28
    スマートポインタの一種である unique_ptr の説明と使い方。
  • サービス終了のお知らせ

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

    yowano
    yowano 2013/08/28
    C++11の新機能の解説も含めた、stringの使い方まとめ。