タグ

c++に関するlindenのブックマーク (22)

  • コンパイル中にコンパイルする「コンパイル時Cコンパイラ」をつくった話 - kw-udonの日記

    僕は先日、「コンパイル時Cコンパイラ」なるプログラムをつくって、公開した。 「コンパイル時Cコンパイラ」とは、コンパイルするとC言語プログラムのコンパイルが行われるというようなC++プログラムである。 C++のコンパイル中に C言語プログラムのコンパイルを行う、 "コンパイル時Cコンパイラ"をつくりました #ELVMhttps://t.co/kKiLU3rLFX— うどん (@kw_udon_) 2016年11月18日 自分で書いておいてなんだが、「なんのこっちゃ」という感じではある。(ちゃんと記事中で説明する。) 実際、変なプログラムではあるのだが、とても嬉しいことに多くの人に面白がっていただき、予想だにしなかった大きな反響をいただいた。 Hacker Newsで1位になったり、LLVMの公式ブログで紹介されたり、果てはC++の作者であるBjarne Stroustrupにも言及されるに

    コンパイル中にコンパイルする「コンパイル時Cコンパイラ」をつくった話 - kw-udonの日記
    linden
    linden 2016/12/04
  • スレッドセーフという幻想と現実 - yohhoyの日記(別館)

    この記事はC++ Advent Calendar 2013の15日目にエントリしています。 内容はC++標準ライブラリとスレッドセーフに関する解説になります。 flickr / rennasverden もくじ What's スレッドセーフ? スレッドセーフという幻想 基型とデータ競合 C++標準ライブラリとデータ競合 C++標準ライブラリ:シーケンスコンテナ編 C++標準ライブラリ:連想コンテナ編 スレッドセーフ RELOADED 基的なスレッドセーフ保証 std::shared_ptr<T> std::rand() std::cout (文のみ約9000字) はじめに マルチスレッド対応の点では他言語に遅れを取っていたプログラミング言語C++ですが、C++11ではようやく標準ライブラリにスレッドサポートが追加されました。C++11スレッドサポートではスレッドクラスstd::thr

    スレッドセーフという幻想と現実 - yohhoyの日記(別館)
    linden
    linden 2013/12/16
    あとで読む
  • C++11 - Lambda Closures, the Definitive Guide - Cprogramming.com

    One of the most exciting features of C++11 is ability to create lambda functions (sometimes referred to as closures). What does this mean? A lambda function is a function that you can write inline in your source code (usually to pass in to another function, similar to the idea of a functor or function pointer). With lambda, creating quick functions has become much easier, and this means that not o

    linden
    linden 2011/09/08
    あとで読む
  • 標準 C++ ライブラリ TR1 拡張リファレンス

    このリファレンスでは、"Technical Report 1 (TR1)" というドラフト文書に含まれている、C++ ISO 標準の提案されている拡張の Visual C++ 実装について説明します。Visual C++ 実装では、固定サイズの配列、関数オブジェクト、ハッシュ テーブル、正規表現、テンプレート メタプログラミング、関連するオブジェクトを集約するためのテンプレート型、および乱数生成がサポートされます。 このセクションの内容 TR1 の正規表現 TR1 がサポートする各種正規表現エンジンの文法について説明します。 <array> コンテナーのテンプレート クラス array および複数のサポート テンプレートを定義します。 <functional> (TR1) operator() を定義する型のオブジェクトである関数オブジェクトを構築するための各種テンプレートを定義します。

    標準 C++ ライブラリ TR1 拡張リファレンス
    linden
    linden 2011/09/07
    最近のVisualStudioはBoost導入しなくてもshared_ptrが使えるのか。知らなかった。
  • Singleton デザインパターンとかポインタとか - 野良C++erの雑記帳

    何回かコメントを書かせてもらった、 Singletonクラスにauto_ptrを使うのは案外難しい - (void*)Pないと こちらの話題。 「auto_ptrからFooを破棄されるかもしれないじゃない」とのことですが、 これは一応 std::unique_ptr を使うことで回避できます(要 C++0x 対応コンパイラ): #include <iostream> #include <memory> // 好みの書き方に書き直してるけど基的には変わらない。 class Foo { typedef Foo self_type; public: static self_type* getInstance() { if( !instance_ ) { instance_.reset( new self_type ); } return instance_.get(); } // ただ、それだ

    Singleton デザインパターンとかポインタとか - 野良C++erの雑記帳
    linden
    linden 2011/07/04
    うーん、難しい…
  • CとC++での例外処理、第2部

    このブラウザーはサポートされなくなりました。 Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。 Robert Schmidt 1999 年 6 月 3 日 このコラムでは、Robert Schmidt は標準の例外処理に対する Microsoft の拡張である Structured Exception Handling(SEH)と Microsoft Foundation Class(MFC)の例外処理について説明します。 はじめに 筆者の前回のコラムでは、例外の分類とそれらを管理するための標準 C ライブラリのサポートについて検討しました。今回は、こうした標準のメカニズムに対する Microsoft の拡張である構造化例外処理(SEH)と Microsoft Foundation Class(MFC)

    CとC++での例外処理、第2部
    linden
    linden 2011/03/29
    try, throw, catchは普通に使うけど、__try, __finallyとかは知らなかったな。
  • volatileで最適化を抑制する - 職業としてのプログラミング

    C言語やC++,Javaにはvolatileという修飾子があります。組み込み系ソフトウェアやマルチスレッドのアプリケーションを書いている方にとっては、なじみ深い存在ですが、そうでない方にはあまり縁がないのかもしれません。しかし、volatileの使い方や存在意義を知らないままコーディングを行うと、思わぬバグを引き起こす場合があります。今回は、そのvolatileキーワードについて簡単に説明したいと思います。 volatileは初期のCであるK&Rには含まれていませんでしたが、ANSI C(C89)以降のC標準規格にはconstと一緒に含まれるようになりました(constとvolatileをあわせてcv修飾子と呼ぶこともあります)。一般的なCなら必ず備えている修飾子です。 volatile修飾子の意味ですが、「プログラミング言語C ANSI規格準拠」によると、 volatileの目的は,黙っ

  • C++ の std::vector に v += 3, 1, 4 で push_back - てっく煮ブログ

    c++boost::assign使ってみた - Faith and Brave - C++で遊ぼう にて boost::assign の使い方が紹介されていた。 #include #include #include #include using namespace std; using namespace boost::assign; int main() { vectorint> v; v += 3, 1, 4; // !!! for(unsigned int i = 0; i return 0; } おおおおお、なんかすごい…!普通なら v.push_back(3); v.push_back(1); v.push_back(4); と書かなきゃならないところを v += 3, 1, 4; と書ける。自分の C++ の常識からするとびっくりするような書き方なのだけど、C++ では

    linden
    linden 2007/12/11
    おおっ。
  • http://www.hey-to.net/ML-archive/vcppML/1999/msg04161.html

    linden
    linden 2007/08/30
  • RTTI のコストを理解する

    イントロダクション RTTI (Run Time Type Information) は実行時型情報などと訳され、その名の通り実行時に型の情報を得る機能のことをいいます。これは、ポリモーフィックなオブジェクトを扱う時に有効な機能です。dynamic_cast 演算子や typeid 演算子、type_info クラスなどがこれにあたります。 便利な機能には大抵コストがついてまわります。RTTI も例外ではなく、プログラムサイズの増加や実行速度の低下などのコストがかかります。そして RTTI は、コストがかかるという理由と、特別必要な機能ではないという理由から、敬遠されがちです。しかし、全てのコードを自分で書く場合は RTTI を使わずに安全な設計をすることも可能ですが、他人の作ったライブラリを使う場合はそうもいかないことがあります。また、自分で全部書く場合でも、RTTI を使った方がスマー

    linden
    linden 2007/02/21
    vcでは21.24倍…今取り組み中の用途には使えない
  • C++: 水面下の仕組み - Microsoft Visual C++ Web Site

    This browser is no longer supported. Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.

    C++: 水面下の仕組み - Microsoft Visual C++ Web Site
    linden
    linden 2007/01/15
    なるほどー
  • 株式会社エス・スリー・フォー » C++の新しいキャスト

    C++の新しいキャスト 従来のキャストの問題点 異なる型への変換において、C/C++ではキャストが用いられます。 // intからlongへのキャスト int ival; int lval = (long)ival; ご存知のとおり、キャストは非常に危険です。 来ならば型の不一致によるコンパイルエラーをねじ伏せるのですから。 キャストの使われ方(意味)は、大きく3種(型変換/型変更/const外し)に分類されます。 型変換 // int から double へ int ival; double dval = (double)ival; 型変更 // long から int* へ long lval; int* iptr = (int*)lval; const外し // const int* から int* へ const int* ciptr; int* iptr = (int*)cip

    linden
    linden 2006/12/08
    前にブックマークしたような気がしたけどしてなかった
  • C++の4つのキャストを使いこなす

    イントロダクション C++ には全部で4種類のキャストがあります。これらの使い方をしっかり確認しておこうというのが今回の主旨です。いきなり題に入ってもいいのですが、まずは C 言語のキャストをおさらいしてみましょう。 (type-name) cast-expression C のキャストにはこの1つの形式しかありません。ややこしいですね。1つしかないのに何がややこしいかって?見た目は1つの形式しかないのに実際の動作は何通りもあるのがややこしいんです。ざっと考えただけでも次の3つの使い方が思い浮かびました。 float average(const int* array, int size); int n = (int) average(array, size); void * get_data(int nID); char * p = (char *) get_data(2); int g

    linden
    linden 2006/10/26
  • いやなブログ - 文字列操作の比較表: Ruby, Python, JavaScript, P...

    文字列操作の比較表: Ruby, Python, JavaScript, Perl, C++ Ruby, Python, JavaScript, Perl, C++ の文字列操作の比較表を作りました。配列操作の比較表の続編です。間違いなどがあったらご指摘いただけると助かります。 Ruby (String) Python (str) JavaScript (String) Perl C++ (std::string)

    linden
    linden 2006/10/24
    Perlとc++の対比が助かる
  • Standard Template Library プログラミング on the Web

    1985年、AT&TのBjarne StroustrupがC++をこの世に送り出しました。その後C++は様々な拡張を繰り返しながら進化してきました。 1991年、ISOはC++の国際標準(standard C++)を定める作業を開始しました。標準C++の最終草案は1997年にISO C++標準化委員会に承認されました。 標準C++が規定するのは言語仕様だけなく、C++標準ライブラリも規格の中で明確に定められています。それまでC++のライブラリといえばiostreamぐらいのものでしたし、それもあくまで"事実上の標準"でしかありませんでした。 そしてそのC++標準ライブラリの一部として組み入れられたのがSTL(Standard Template Library)です。すなわちSTLは標準C++の仕様の一部ということです。 僕がSTLを知ったのは1995年、いくつかのコンパイラがtemplat

    linden
    linden 2006/05/01
  • VC++と ActiveXコンポーネント

    VC++で ActiveXコンポーネント(OCX)を作ってみよう ・ MFCによるActiveXコンポーネント(OCX)の作成 Visual Basicで使用したり、Internet Explorerで使用するための コンポーネントとして ActiveX コンポーネントがありますが 今まで使いなれたMFCで安易に作成するには、新規作成でCOleControl から派生された CxxxxCtrl クラスに直接コントロールを配置したり イベントハンドラを配置するのは大変なので、ダイアログリソース を作成して、CDialog派生クラスにすべて処理を任せれば簡単です。 このCDialog派生クラス(CyyyyDlgとします)を CxxxxCtrlに配置するには、 通常のモーダルダイアログとして表示するのではなく、CxxxxCtrlクラス上に モードレスダイアログとして表示すればいいことになります。

  • いけてないぞ、VCのSTL!

    このドメインは お名前.com から取得されました。 お名前.com は GMOインターネットグループ(株) が運営する国内シェアNo.1のドメイン登録サービスです。 ※表示価格は、全て税込です。 ※サービス品質維持のため、一時的に対象となる料金へ一定割合の「サービス維持調整費」を加算させていただきます。

  • C++クラス設計に関するノート

    C++が他のオブジェクト指向言語と比べて難しいのは、やはりメモリ管理をプログラマが自分でしなければいけない点だと思います。よくよく注意しないと、削除し忘れたり、同じオブジェクトを2度削除してしまうというエラーが発生します。このノートでは、オブジェクトを「値オブジェクト」と「参照オブジェクト」というカテゴリに分け、詳細設計の段階で注意すべき点を整理しておきたいと思います。 0. はじめに 私自身今までいくつかのプログラミング言語を使ってきましたが、C++ が他のオブジェクト指向言語と比べて難しいのは、やはりメモリ管理をプログラマが自分でしなければいけない点だと思います。例えば、 Person* person = new Person(); と生成したオブジェクトは、使い終わったら次のように削除しなければなりません。 delete person; 生成してすぐ削除するなら簡単なのですが、実際に

    C++クラス設計に関するノート
    linden
    linden 2006/04/21
  • エンタープライズ:ドローツールを作る (1/6)

    [C Magazine連載]プログラムのレシピ(第2回) ドローツールを作る (1/6) 連載では、さまざまなツール系アプリケーションの作り方を解説します。言語を学んだあと、いよいよアプリケーションを作ってみようという方には、とくに参考になると思います。今回は「ドローツール」を作ります。ドローツールは、矩形や楕円といった図形を組み合わせて図を作成するツールです。制作上の主なポイントは、図形管理用クラスの設計と、図形選択時の当たり判定です。 ドローツールは、Fig.1のように、矩形や楕円、ポリゴン(多角形)やテキスト(文字列)といった基図形を組み合わせて、さまざまな図を描くことができるツールです。ペイントツールはフリーハンドで絵を描くために使いますが、ドローツールはきっちりとした作図のためのツールです。絵をピクセル(画素)で扱うペイントツールとは違い、図をベクトル(座標)で扱うので、拡大

    linden
    linden 2006/04/10
    ドローソフトの作り方
  • Let's Boost

    Boost C++ Libraries の紹介サイトです。 :: by Google はじめに ご挨拶 Boost のインストール方法 参考リンク集 ニュース ◆ Version 1.42.0 と 1.41.0 対応 (2010/03/14) 新規ライブラリに関する Let's Boost のページ…: property_tree (汎用木構造型コンフィグ管理) / uuid (ユニークID生成器) ◆ RSS つけました (2009/08/28) ◆ Version 1.40.0 と 1.39.0 対応 (2009/08/28) 新規ライブラリに関する Let's Boost のページ…: Signals2 (Signal/Slotライブラリ改良版) ◆ Version 1.38.0 と 1.37.0 対応 (2009/02/22) 新規ライブラリに関する Let's Boost のペー

    linden
    linden 2006/02/20