タグ

関連タグで絞り込む (196)

タグの絞り込みを解除

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

  • リアクティブプログラミングC++? - 名古屋313の日記

    C++ | 00:00リアクティブプログラミングというパラダイムがあるようです。詳しくはなぜリアクティブプログラミングは重要か。 - Conceptual Contextureを見てもらう事にして、取り敢えず雰囲気次のような事が起きるパラダイムらしいです。 a = 1; b = a * 3; a = 2; これでbを出力すると、普通に行けば3が出力されそうなものですが、リアクティブプログラミングだと6が出力されるみたいです。式を保存してると考えればいいんですかね。bはとにかくaの3倍なんだよってことみたいですよ。取り敢えずC++で適当に実装。 #include #include template typename T> class reactive { public: typedef T value_type; explicit reactive(const T &val) : val

    yowano
    yowano 2015/05/08
    C++でリアクティブプログラミングを実装してみた。
  • traitsの利用する場面(メモ) - deruiの日記

    最近仕事について色々考えています。今の環境は正直自分のためになっていないので、何とか変える努力というかそういうのが必要だと切実に感じています。 とまぁそういうことは置いておいて、今回はC++の話題です。 boostとかC++0xとか、最新鋭の強力なライブラリを使いこなしている方にとっては、traitsというテクニックは最早当然のものだと思います。 このtraitsというテクニック、特にSTLで非常に多く、そして深く利用されています。 とは言っても、中々理解しずらいテクニックでもあります(少なくとも私にとって)。 なので、事例を示しつつ、なんとか理解できるようになりたいと思います。 まずは以下のようなクラスがあったとします。継承を利用しています。 class Hoge { pubilc: virtual ~Hoge() {} virtual char func() = 0; }; class

    traitsの利用する場面(メモ) - deruiの日記
    yowano
    yowano 2014/12/30
    C++ における traits というテクニックの解説。型に依存する一部の実装を抽出、専用のクラステンプレートのメンバとし、特殊化を用いて実装を変化させることで、最小単位で実装を分割できる。
  • 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でのそれぞれの書き方に関する解説。
  • テンプレートの実体化の実装方法とODR違反について

    問題 以下のC++コードを考える。 int plus( int a, int b ) { return a + b ; } double plus( double a, double b ) { return a + b ; } このC++コードは、int型とdouble型以外、コードはほぼ同じである。 しかし、ほとんどのコンピューターではint型とdouble型は操作方法が異なるため、この2つの関数は、全く別のコンピューターが処理できるコードに変換される。 ところで、古典的なC言語やC++コンパイラーの実装方法として、ソースコードのファイルをそれぞれ、一つ一つの翻訳単位としてコンパイルし、翻訳単位ごとにオブジェクトファイルを生成し、リンカーで複数のオブジェクトファイルを結合(リンク)して、単一のプログラムを生成するというものがある。 よくある実装では、オブジェクトファイルは、その翻訳単位

    yowano
    yowano 2014/12/03
    分割コンパイル、名前マングリングの説明。コンパイラにおけるテンプレートの実体化の実装方法と、テンプレートのみODR違反からの特例的除外されていることに関して、歴史的経緯を交えた解説。
  • テンプレートの実装をヘッダに書かなければならない理由 - (void*)Pないと

    ロベールのC++入門講座 09-03 ロベールではテンプレートの実装はヘッダに書かなければならないとさらりと書かれていましたが、何故そうしないといけないのかがを読むだけでは今一良くわからなかったので色々調べてみたところ、理由がわかりました。 まず宣言と定義をファイルを分けて実装した場合、どういった状態になるかを見てみましょう。 // -- csample.h -- #ifndef __CSAMPLE_H__ #define __CSAMPLE_H__ template<class T> void template_swap(T& a, T&b); #endif // -- csample.cpp -- #include "csample.h" template<class T> void template_swap(T& a, T&b) { T t = a; a = b; b = t;

    テンプレートの実装をヘッダに書かなければならない理由 - (void*)Pないと
    yowano
    yowano 2014/12/03
    なぜ C++ のテンプレートの実装をヘッダに書かなければいけないのか、詳細な説明。宣言と実装を分けた場合のサンプルソースと、それをビルドした時のコンパイラ・リンカの挙動を具体的に説明している。
  • 関数を呼び出すということ - Web/DB プログラミング徹底解説

    前の資料では、WINAPI というのは __stdcall の別名であり、これは呼び出し規約であると説明しました。 そして 「呼び出し規約」 を理解するためには 「関数を呼び出す」ということがどのようなものか理解すると良いです。 尚、ここでは x86 アーキテクチャを想定しています。 結局、関数を呼び出すってどういうこと? あるプログラム A から、あるプログラム B を呼び出す時に x86 ではスタックというメモリ領域を使用します。 ここでは、A は Windows の Win32 サブシステム、B はここで作った自前のプログラムとします。 A から B の WinMain を呼び出すときのことを考えます。 この時に、A はスタックにパラメータを積み上げます。 B を実行するときに、必要に応じてスタックに積み上げられたパラメータを参照します。 B の処理が終わったら、制御は A へと戻り

    関数を呼び出すということ - Web/DB プログラミング徹底解説
    yowano
    yowano 2014/06/30
    __stdcallは、「引数のスタックへの積み上げ順序は右から左」で、「スタックの巻き戻しをするのは呼び出された側」という呼び出し規約に従って関数を実行することを示す。
  • POINTER「配列とポインタの完全制覇」「C言語 ポインタ完全制覇」

    タイトルは「C言語 ポインタ完全制覇」。 このページの書籍化とはいえ、内容の大半は書き下ろしですので、 既にWebで読んでおられる方にも決して損はさせません。 詳細はこちらへどうぞ。 「C言語 ポインタ完全制覇(第2版)」書籍情報 「C言語 ポインタ完全制覇」書籍情報(旧版) 技術評論社さんによる書籍案内はこちら。 第2版 旧版 修正履歴は、このページの末尾にあります このページについて 全くもって僭越ながら、恐れおおくも偉そうにも、 こんな文書をWWWで公開させていただくことにしました。 この文書は、もともと社内向けの教科書として作成したものです。 私は、一介の文系出身プログラマであり、 特に情報関係の教育を受けたわけでもなく、 プログラミング言語に深い造詣を持っているわけではありません。 この文書にも多くの誤りや、誤解を招く表現があるかと思います。 そのような記述を見付けられた方は、ぜ

    yowano
    yowano 2014/06/14
    配列とポインタのまとめ。
  • 参照渡し or 値渡し? - yohhoyの日記

    C++03/11における関数の引数型とコピー/ムーブ処理コストとの関係について。 記事の内容は C++Now 2012 Keynote: "Moving Forward with C++11" スライド資料(Part I, Part II) に基づく。(Part IIのpp.22-57) 型Tに対する変更操作を行う関数において、引数の型をconst参照渡し(const T&)*1または値渡し(T)とするどちらが “良い” デザインかという話。ここでは関数呼び出しから値を返すまでに生じるコピーコンストラクタ/ムーブコンストラクタの呼び出し回数によって評価する。つまり、回数が少ない方が低コスト=良いデザインという観点にたつ。 // const参照渡し; pass-by-const-reference T modify1(const T& x) { T tmp(x); tmp.modify()

    参照渡し or 値渡し? - yohhoyの日記
    yowano
    yowano 2014/05/14
    型Tに対する変更操作を行う関数において、引数の型をconst参照渡しにする場合、値渡しにする場合、const参照渡しと右辺値参照渡しの二種類を準備する場合、それぞれの挙動のまとめ。
  • 暗黙の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への参照のこと。
  • C++のshared_ptrを関数への引数として渡す場合はconst参照で | YOHEI's BLOG

    Channel9にて公開されているC++ and Beyond 2011の動画にて、Andrei Alexandrescu、Scott Meyers、Herb Sutterの三名が、C++ and Beyond 2011の参加者からの質問に回答している。 その中で4:34からの「On shared_ptr performance and correctness」が興味深い。 質問の主旨としては、shared_ptrを関数やメソッドへ渡す場合、const参照で渡すべきかどうかということらしい。つまり、 void func(std::shared_ptr<std::string> s) { ... } int main(int argc, char* argv[]) { std::shared_ptr<std::string> s = ...; func(s); } とするか、const参照に

    yowano
    yowano 2014/05/13
    shared_ptrを関数への引数として渡す場合はconst参照で渡す方が良い。参照カウンタの処理機構が動かない分、速度が速くなるからである。
  • 規格書を読もう - 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の参考書を作者が無料で公開しているもの。購入することが望ましい。
  • const教信者が頭の可愛そうな人たちと言われないために - 名古屋313の日記

    C++ | 12:21ローカル変数に対するconst - melpon日記 - C++すら(ryにて、厳しいご指摘をいただいたので、ここでconstを付ける意義をしっかりとまとめておきたいと思います。ただ妄信的にconstを付ける頭の可愛そうな人と思われないためには、constを付ける意義を的確に説明できとかないとというわけです。実際周りにもconst教???って人が多いので。ここではconst教の真髄であると思われる、ローカル変数、値渡しの引数、戻り値に対してconstを付けることについて触れることにします。#define代わりのconst、const参照渡し、constメンバ関数等は、const教でなくても誰もがやってくれていることだと信じているので触れません。constの意義まず、constを付ける意義としては、以下のものが挙げられるでしょう変数にある値を束縛したことの表明禁止したい

    yowano
    yowano 2014/03/05
    ローカル変数、値渡し引数へのconst付けは、無変更性の意味を付加するために必要。戻り値へのconst付けは、ムーブセマンティクスを阻害するため、演算子のオーバーロード等以外では付けない方が良い。
  • [PDF] Cプログラマのための カッコつけないプログラミング の勧め

    カッコつけないプログラミング 光成滋生(サイボウズ・ラボ) Cプログラマのための の勧め 自己紹介 
好きな言語 ‣ C++, Xbyak(自作x86/x64用C++用JITアセンブラ) ‧ C++WG小委員会エキスパート 
まあまあ使う言語 ‣ Python, JavaScript, Haskell 
サイボウズ・ラボで最近やってること ‣ 暗号の高速実装研究 ‣ 自然言語処理(まだ始めたばかり) 普通じゃないプログラミング2010 9/21 / 202 昨今の言語 
多機能,高度な概念 ‣ C++0x ‧ 型推論,ラムダ式,move semanticsなどが追加される ‣ Haskell ‧ 高階関数,参照透過性,モナド,非正格評価… 普通じゃないプログラミング2010 9/21 / 203 難しい概念は理解も使用も大変 
人にものを教えるには,その7倍の理解が必要 (要出典) 
プ

    yowano
    yowano 2014/02/28
    型のない変数の宣言とincludeディレクティブのみ(制御分はもちろん、main関数を含め関数を1つも使わない)でプログラムを完成させるネタ。
  • return文 - Wikipedia

    return文(リターンぶん、英: return statement)とは、プログラミング言語における文の一つである。goto文やbreak文、continue文のようなジャンプ文 (jump statement) に分類される。サブルーチンからの復帰に使われ、復帰と同時に値を返すことができる。その値は戻り値(もどりち、英: return value)、返り値(かえりち)、返却値(へんきゃくち)あるいはそのままreturn値(リターンち)などと呼ばれる。 日産業規格(旧称・日工業規格)では、C言語の国際標準規格「ISO/IEC 9899:1999」の翻訳「JIS X 3010:2003」およびC++の国際標準規格「ISO/IEC 14882:2003」の翻訳「JIS X 3014:2003」において、「返却値」という訳語を使用している。 言語別の意味や構文[編集] C/C++[編集]

    yowano
    yowano 2014/02/27
    (前略)main関数の戻り値がintの場合にreturnを省略すると、return 0; があったとみなされる。/(前略)return [void型を返す関数呼び出し]; はコンパイル可能。
  • ドワンゴに入社した

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

  • C++クラスの書き方が面倒くさい訳 - すたんだーどっ☆あいおーっ!

    Cが全然分からないころの話。 javaのように1クラス1ファイルに書かないのはなんで? メンバがポインタばっかりなのはなんで? という疑問を持ちながらコーディングしてるともやもやして嫌でした。 もやもやがいやなのでjava風に書いていたら当然のように詰まりました。 ポインタじゃなかったらメモリが大変なことになるだろうが! というのは最もなんですけど、じゃ小さいプログラムならありなのか?スマートポインタ使えばいいのか?と言うとそうでもない。 今日書いてみたいのは、クラスは相互参照がめんどくせぇから分割しろ。そして同じ理由でメンバ変数はポインタにしとこうぜ、というお話。 相互参照の解決 AクラスがBクラスを使って、BクラスがAクラスを使う。 こういう状態を相互参照とか相互includeとか言うと思う。 javaは何でもないことだけど、C++はこれを簡単には許してくれない。 相互参照の解決方法に

    C++クラスの書き方が面倒くさい訳 - すたんだーどっ☆あいおーっ!
    yowano
    yowano 2014/01/30
    前方参照、循環インクルード、不完全クラスのあたりの面倒な話のまとめ。
  • DirectXの話 第108回 - もんしょの巣穴

    今回はDirectX11の新機能であるCompute Shaderを使ってパーティクルを計算・描画してみます。

    DirectXの話 第108回 - もんしょの巣穴
    yowano
    yowano 2014/01/17
    記事の本旨はComputeShaderにあるが、構造化バッファ(RWバッファ、RWStructuredBuffer)について触れているという意味でも貴重な記事。
  • letsboost::bimaps

    abstract 必要なヘッダ <boost/bimap/bimap.hpp> (基), <boost/bimap/set_of.hpp> (set view), <boost/bimap/multiset_of.hpp> (multiset view), <boost/bimap/unordered_set_of.hpp> (unordered_set view), <boost/bimap/unordered_multiset_of.hpp> (unordered_multiset view), <boost/bimap/list_of.hpp> (list view), <boost/bimap/vector_of.hpp> (vector view), <boost/bimap/unconstrained_set_of.hpp> (viewなし) 出来ること 双方向map リファ

    yowano
    yowano 2014/01/14
    bimapの基本サンプルソース。