タグ

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

タグの絞り込みを解除

c++とC++に関するtyruのブックマーク (593)

  • C++11TMPによるコンパイル時コンパイラltmpcを支えるテンプレートメタプログラミングテクニック - Qiita

    C++のテンプレートメタプログラミングによるコンパイル時C言語コンパイラ、「ltmpc」を作っています。まだまだ実装すべきことはたくさんありますが、最低限動くようになってきました。 ltmpcのはなし 実は、以前にC11のフルセットをサポートするC言語のコンパイラがC++TMP上に実装されたことがありました。 コンパイル中にコンパイルする「コンパイル時Cコンパイラ」をつくった話 しかし、この自動生成法のアプローチでは、メモリ使用量が爆発する問題から、残念ながら現存するコンパイラで現実的なコンピュータ上で動かすことはできません。 テンプレートメタプログラミングで、C言語のコンパイラほど大きな「動く」プログラムが作られたことは今までになかったように思われます。今回は、いかにして「動く」TMPプログラミングを行っていくか、というおはなしをしたいと思います。 既存技術の紹介 constexprメタ

    C++11TMPによるコンパイル時コンパイラltmpcを支えるテンプレートメタプログラミングテクニック - Qiita
    tyru
    tyru 2017/12/28
    C++er はほんとうにあたまがおかしい…
  • 年末C++情報 - 無名再帰

    unsigned fib(unsigned n) { if (n < 2) return n; else return fib(n - 2) + fib(n - 1); } fib(10);

    tyru
    tyru 2017/12/18
    C++ でチューリングコンビネータ?らしい「これはYコンビネータではなく,チューリングコンビネータ(の変形)である」
  • p0798r0: Monadic operations for std::optional

    tyru
    tyru 2017/12/06
  • GCCがC++17のコア言語機能を実装完了

    Hacker Newsで話題になっていて知ったのだが、GCCがいつのまにか、C++17の現ドラフトの全コア言語機能を実装している。 C++ Standards Support in GCC - GNU Project - Free Software Foundation (FSF) とうとう、なかなか実装されなかったクラステンプレートのコンストラクターからの実引数推定も試すことが出来た。 #include <iterator> template < typename T > struct X { X( T t ) { } template < typename Iterator > X( Iterator first, Iterator last ) { } } ; // deduction guide template < typename Iterator > X( Iterator,

    tyru
    tyru 2017/01/13
  • XOR swap今昔物語: sequence pointからsequenced-beforeへの変遷 - Qiita

    int a = /*...*/; int b = /*...*/; // 変数a, bの値を交換 a ^= b; b ^= a; a ^= b; この記事の1行まとめ:あのC/C++言語もプログラマ・フレンドリに変化しているよ。それでも自分の足を撃ち抜きたくなければ、小賢しいコードは書かないように。 おことわり 記事は、はてなダイアリーの記事でも利用した draw.io サービスを使ってお絵かきしたい欲求(8割)と、同記事をまとめた後に気づいた内容の整理(1割)と、昨年(2016)のC++ Advent Calendar残り1枠を埋める目的(1割)で書かれました。 このように不純な動機にもとづくため、あまり丁寧な解説を行っていません。特に後半C++11以降の説明では、Cryoliteさんによる一連の連載記事を前提とします。もし未読であれば連載記事を一読してから、記事に戻られることを強く

    XOR swap今昔物語: sequence pointからsequenced-beforeへの変遷 - Qiita
    tyru
    tyru 2017/01/08
    「式の末尾に付けるセミコロン(;)=副作用完了点」「同じ変数への変更アクセスを、2つの副作用完了点の間では最大1回までしか行ってはならない」
  • C++1z 畳み込み式 - Faith and Brave - C++で遊ぼう

    C++1zでは、「畳み込み式 (Fold expressions)」という機能が入ります。これは可変引数テンプレートのパラメータパックに対して集計操作を行うためのものです。 たとえば、整数のシーケンスを与えてその合計値を求める計算は、以下のように書けます: #include <iostream> template <class... Args> int sum(Args... args) { // 「... @ args」が畳み込み式。@の部分は任意の二項演算子 return (... + args); } int main() { int x = sum(1, 2, 3, 4, 5); std::cout << x << std::endl; // 15 } このような計算はこれまで再帰を使用して実装する必要がありましたが、より簡潔に書けるようになりました。 ここでは、argsパラメータ

    C++1z 畳み込み式 - Faith and Brave - C++で遊ぼう
    tyru
    tyru 2016/12/08
  • <--(中略)-- 演算子 - yohhoyの日記

    プログラミング言語C++のヘンテコな演算子。💘(U+1F498) #include <iostream> int main() { int n = 100; while ( 0 <-------------------- n) { // !? std::cout << n << ' '; } } 実行結果: 90 80 70 60 50 40 30 20 10 タネ明かし 前掲C++ソースコードの振る舞いを括弧を用いて明確化する。int型の変数nに対し前置デクリメント演算子を10回適用し、その結果を値0と比較している。C++では組込み前置デクリメント演算子の戻り値は左辺値(lvalue)となるため、該当ソースコードはwell-definedとなる。 int n = 100; while ( 0 < --(--(--(--(--(--(--(--(--(--n))))))))) ) { s

    <--(中略)-- 演算子 - yohhoyの日記
    tyru
    tyru 2016/12/07
    C++ では well-defined。C では ill-formed
  • 変更部分が全て排他制御されている場合でもatomicは必要か?

    1#include <atomic> 2#include <chrono> 3#include <iostream> 4#include <thread> 5 6int main() 7{ 8 std::atomic_int x(0); 9 int y(0); 10 std::mutex mw; 11 std::mutex mr; 12 std::thread thws[1000]; 13 std::thread thrs[1000]; 14 for (int i = 0; i < 1000; ++i) { 15 thws[i] = std::thread([&]() { 16 std::this_thread::sleep_for(std::chrono::seconds(1)); 17 std::lock_guard<std::mutex> lock(mw); 18 x++; 19 y

    変更部分が全て排他制御されている場合でもatomicは必要か?
  • マイクロソフトは、C++でいかにしてMicrosoft Officeのクロスプラットフォームを実現したのか

    マイクロソフトは、C++でいかにしてMicrosoft Officeのクロスプラットフォームを実現したのか マイクロソフトはOfficeソフトウェアのマルチプラットフォーム展開を進め、Windows版、Macintosh版だけでなくWebから使えるOffice Onlineに加え、iPad版、Android版も公開を始めました。 Officeのような大規模なアプリケーションのマルチプラットフォームへの移植は、どのようにして行われているのか。9月に米国で開催されたC++言語のイベント「CppCon 2014」で行われた同社の講演「How Microsoft Uses C++ to Deliver Office (and More) Across iOS, Android, Windows, and Mac, Part I 」がYouTubeで公開されています。 Officeのコア部分はC++

    マイクロソフトは、C++でいかにしてMicrosoft Officeのクロスプラットフォームを実現したのか
  • C++のコンパイルエラー爆発を競うコンテスト - Faith and Brave - C++で遊ぼう

    Results of the Grand C++ Error Explosion Competition 少し前に、C++のコンパイルエラーの長さを競うコンテストが開催されていました。 受賞のカテゴリは2つあり、ひとつめは最小コードで最大のコンパイルエラーを出した人、もうひとつは芸術的な評価による受賞です。 最小コードで最大のコンパイルエラー この部門で優勝したのはEd Hanwayさんという方で、ソースコード量に対して59億倍のコンパイルエラーメッセージを出力したそうです。 それには、自身を2回インクルードするという手法が使われていたそうです。 #include ".//.//.//.//jeh.cpp" #include "jeh.cpp" 次点として、インクルードに後方参照を使用した、7億9千万倍のコンパイルエラーを出力するコード: #include "set>.cpp" #incl

    C++のコンパイルエラー爆発を競うコンテスト - Faith and Brave - C++で遊ぼう
    tyru
    tyru 2014/03/26
    「ソースコード量に対して59億倍のコンパイルエラーメッセージ」
  • C++で作るWebアプリケーション

    14 views Boost.勉強会 #12で発表した「C++で作るWebアプリケーション」 ... More… Boost.勉強会 #12で発表した「C++で作るWebアプリケーション」 C++JavaScriptにコンパイルするコンパイラ Emscriptenを使ってC++でブラウザ上で動くアプリケーションを開発する方法を解説します C++で作るWebアプリケーション Presentation Transcript そんなC++の進出を拒んできた領域C++はとてつもなく汎用的な言語である2013年6月22日土曜日 WEB2013年6月22日土曜日 サーバ クライアントこっちは割とどんな言語でも書ける問題はこっち2013年6月22日土曜日 JavaScriptWEBブラウザで動く物を作るために長らく使われてきた言語近代的な多くのブラウザが共通して対応している唯一の言語2013年6月22

  • 2014-01-pre-Issaquah mailingの簡易レビュー Part 2

    2014-01-pre-Issaquah mailingが公開された。 前回に引き続いて、C++WGの論文集を解説していく。 N3863: Private Extension Methods プライベート拡張メソッド(Private Extension Methods, PEM)は、privateな非virtualメンバー関数を、クラス定義の外で定義できる機能だ。 以下のようなコードを考える。 // Foo.h class Foo { public : int get_secret() ; private : void set_secret( int value ) ; int secret ; } ; 時に、このヘッダーファイルは、ユーザー側から利用される。そのようなヘッダーになぜ、privateなメンバーの情報を書いておく必要があるのか。よいクラスの条件とは、なるべく多くを隠匿すること

    tyru
    tyru 2014/03/01
    見た目ジャバっぽい
  • [cairo] Cairo and ISO C++

    tyru
    tyru 2014/01/04
    "We are actively looking at the potential standardization of a basic 2D drawing library for ISO C++"
  • ClangがC++11を完全実装! 繰り返す、C++11を完全実装

    [Phoronix] LLVM's Clang Compiler Is Now C++11 Feature Complete C++11 support is now feature-complete. · e6e68b5 · llvm-mirror/clang · GitHub 3時間前のコミットにより、Clangは晴れてC++11規格を完全に実装した。その通り、完全にすべて実装した。 コミットは、Inheriting Constructorsとthread_localの機能を有効にする変更だ。 もちろん、まだ実装にバグは残っているだろうし、規格上のバグもあるので、開発に終わりはない。ただし、今日は記念すべき日である。 static_puts said... そうすると、ますますC++11の重要性が高まってきますね! 「寄付のお願い」の方にも書かせていただいたのですが、書籍の執筆への寄

    tyru
    tyru 2013/04/21
  • neocomplcache-clang - C++でゲームプログラミング

    結構前なんですが、neocomplcache に clang_complete が取り込まれた『neocomplcache-clang』が作られたので、その紹介です。 neocomplcache-clang では、clang_complete と neocomplcache が競合してしまう問題が解消されており、neocomplcache 上で、clang_complete と同等のコード補完を行うことが出来ます。 これで、clang_complete を使用する敷居がだいぶ下がったんじゃないでしょうか。 [テストした動作環境] clang-2.9(http://llvm.org/releases/download.html#2.9) python-2.6.6(g:neocomplcache_clang_complete_use_library=1 の場合) neocomplcache(h

    neocomplcache-clang - C++でゲームプログラミング
  • とある愚直のアロケータ - 神様なんて信じない僕らのために

    前置き。dlmallocについて書くぞ!と言っておいて書いてなかったので。orz...すみません。 あろけーたをじぶんでかいてはいけません!! なぜ、って大抵糞だからです。 例えば、こんな管理構造を持ったアロケータをよく見るんですが、 typedef struct _Allocator { unsigned char* pPool; // メモリプール int nPoolSize; // メモリプールのサイズ struct _SMemChain* pHead; // 番兵 struct _SMemChain* pTail; // 番兵 struct _SMemChain* pLast; // 最後に追加されたチェインタグ } Allocator; typedef struct _SMemChain { struct _SMemChain* pPrev; // 前のチェインタグ struct

    とある愚直のアロケータ - 神様なんて信じない僕らのために
  • namespaceでprivateはやっぱりできないと考えるべきなのかしら。 - チリペヂィア

    こーいう方法があるようです。 http://okwave.jp/qa/q6902744.html ちょと読みにくかったので書き直します。 namespace myLib { namespace { // privateな実装 namespace prv_impl { void hoge_impl() { /* ほにゃらら */ } } // publicな定義 void hoge() { prv_impl::hoge_impl(); } } namespace prv_impl {}; // 実装が書いてある方のprv_implへのアクセス殺し。 }void func() { myLib::hoge(); // これはOK。 // でも myLib::prv_impl::hoge_impl(); はNG! }これはVC2010でコンパイル通りました。最初さっぱり意味がわからなかったので、さ

    namespaceでprivateはやっぱりできないと考えるべきなのかしら。 - チリペヂィア
    tyru
    tyru 2013/03/20
  • Big Sky :: 最速と言われる JSON パーサ「rapidjson」が本当に爆速なのか試してみた。

    なんびとたりとも俺の前は走らせねぇ ガチバトルです。 rapidjson - A fast JSON parser/generator for C++ with both SAX/DOM style API - Google Project Hosting Rapidjson is an attempt to create the fastest JSON parser and generator. Small but complete. Support... https://code.google.com/p/rapidjson/ fastest をうたうとは度胸があるなーと思いながら、半信半疑で試してみました。 rapidjson も picojson 同様に、ヘッダファイルだけあればコンパイル出来る C++ 向け JSON パーサ(およびシリアライザ)です。 まずは rapidjso

    Big Sky :: 最速と言われる JSON パーサ「rapidjson」が本当に爆速なのか試してみた。
    tyru
    tyru 2013/02/16
  • 高速かつ省メモリで文字列を扱うデータ構造「wavelet tree」

    はじめに 大規模なデータを扱うアプリケーションでは、速度とともに作業領域量も大きな問題となります。作業領域がメインメモリに収まらない場合、スワッピングが発生し、大幅な速度低下につながります。そのため近年、データ構造は高速なだけでなく、作業領域量が小さいことも求められています。今回紹介するのは2003年に提案されたデータ構造、wavelet tree(以下「WT」と表記)です。WTは圧縮索引やSuccinct Data Structureなど、データをコンパクトに表現する際に重要なデータ構造です。WTは文字列T[0...n-1]が与えられた時、次の2つの操作を定数時間でサポートします。 rank(p, c)――T[0...p]中のcの出現回数を返す select(i, c)――(i+1)番目のcの位置を返す WTの作業領域量は、文字列をそのまま保存した時の約2倍程度です。 対象読者 C++

    高速かつ省メモリで文字列を扱うデータ構造「wavelet tree」
    tyru
    tyru 2013/02/02
    Bjarne Stroustrupが文字列クラスの実装には様々な実装があるって論文書いてた記憶 / Vimではどうだったかな。シンプルに行ごとのリストでバッファを実現してただろうか。
  • C++1y boolへの変換演算子をコンテナに持たせる - Faith and Brave - C++で遊ぼう

    N3509 Operator Bool for Ranges std::vector、std::stringといったコンテナクラスに、operator boolを持たせよう、という提案。 これがあると、!empty()を必要とする状況でプログラムの冗長性を解消できる、というのが動機です。 // 従来の方法 string s = f(); if (!s.empty()) { // sを使った処理 } // operator boolがある場合 if (string s = f()) { // sを使った処理 } こういう書き方は、Boost.Optionalでよく使います。文字列だと、1行ずつのファイル読み込み処理などで使えると思います。 boolへの変換演算子は、Boost.Rangeのiterator_rangeではすでに提供されています。

    C++1y boolへの変換演算子をコンテナに持たせる - Faith and Brave - C++で遊ぼう
    tyru
    tyru 2013/01/27
    おお