タグ

c++に関するblanketskyのブックマーク (33)

  • C言語の関数の仮引数における配列型宣言の危険性について - yuyarinの日記

    #lowhacksでnyaxt, nishioが配列とポインタの違いについて議論していた。その中で関数の仮引数を配列として宣言した場合の挙動はどうなるのか、という話題にたどり着いた。結果僕は非常に危険だと思った。 しかし、まさかそんなことする人はいないだろうと、この記事を書きかけで放置していたのだが、C言語を学習中の友人が危惧していたコードを書く可能性があるミスをしてしまったので書こうと思う。初心者のためにソースは全文、コンパイルチェックをした上で掲載している。 sizeof演算子のおさらい sizeof演算子は演算対象が配列ならば、配列の要素数×要素のサイズが返ってきて、ポインタならばポインタのサイズ(32bit系では4)が返ってくる。 /* 1 */ #include <stdio.h> #include <string.h> int main(void) { char str[] =

    C言語の関数の仮引数における配列型宣言の危険性について - yuyarinの日記
    blanketsky
    blanketsky 2008/06/10
    リファクタリング時のはまりどころ。
  • c++のデバッグをするならgdb-6.8を使いましょう。 - ぴょぴょぴょ? - Linuxとかプログラミングの覚え書き -

    2008年の3月にリリースされたgdb-6.8の目玉機能の一つに「C++サポートの強化」があります*1。この機能を使うと、STLやboostのようなテンプレートを使ったコードのデバッグがかなり楽になります。C++使いの方は、是非gdbを6.8にupgradeしましょう。 具体的に、以下のようなコードを使って、「C++サポートの強化」について説明します。 #include <iostream> using namespace std; template <typename T> class A { public: void func() { cout << sizeof(T) << endl; } }; int main() { A<int> integer; A<double> real; integer.func(); real.func(); return 0; } このコードに対して

    c++のデバッグをするならgdb-6.8を使いましょう。 - ぴょぴょぴょ? - Linuxとかプログラミングの覚え書き -
  • Dの複素数型 vs C++のstd::complex - プログラミング言語 D 2.0

    Dの複素数は、C++のstd::complexクラスと比較するとどうなのでしょう? 構文的な美しさ C++ では、複素数型は: complex<float> complex<double> complex<long double> です。C++ では虚数型というものは区別されていません。D には 3 つの複素数型と 3 つの虚数型があります: cfloat cdouble creal ifloat idouble ireal C++の複素数は数値リテラルと相互利用できますが、 虚数型を持たないため、 虚数はコンストラクタを呼び出す構文でのみ作れます: complex<long double> a = 5; // a = 5 + 0i complex<long double> b(0,7); // b = 0 + 7i c = a + b + complex<long double>(0,7

    blanketsky
    blanketsky 2008/04/21
    虚数型が無いことで、 気付かないうちに誤った計算結果が得られる可能性がある
  • http://docsrv.sco.com/SDK_clib/CTOC-_Complex_Arithmetic_in_C.html

  • WhyINoLongerLikeOrUseCPlusPlus - もう C++ なんて好きでもないし使いもしない理由。

    WhyINoLongerLikeOrUseCPlusPlus - もう C++ なんて好きでもないし使いもしない理由。 目次 この文書について もう C++ なんて好きでもないし使いもしない理由。 もう C++ なんて好きでもないし使いもしない理由。 この文書について "Why I No Longer Like or Use C++" の日語訳です. http://prophipsi.blog-nospam-spot.com/2008/03/why-i-no-longer-like-or-use-c.html -nospam- は削除してください... 推敲歓迎: 誤訳, タイポ, 訳語の不統一, そのほか... 今日、 Artima に上がっていた C++ の記事を読んだ。右辺値参照(rvalue reference) という C++ の新機能について解説するものだ。頑張って読むうち

  • emacs C++ 開発環境 link集 - niitsumaの日記

    emacsでc++開発を行うための情報を集めました。まとめをここでしています 以下それぞれのリンク Emacs で C 言語プログラミングを始める人へのイントロダクション 初心者向けdocment 以下の2項目が役立つ タグジャンプ ここで説明しているtagファイルの作成方法 $ find . -name "*.[chCH]" -print | etags - はubuntu7.10では動かなかった 関数名の補完入力がM-tabでできる タグジャンプはここで説明してるetagより後述のgtagの方が便利 Benjamin Rutt's Emacs C development tips (English) complieをする窓の大きさを小さめにする方法 インデントを自分好みにする方法 etagの使い方。Emacs で C 言語プログラミングを始める人へのイントロダクション よりも詳しく解説

    emacs C++ 開発環境 link集 - niitsumaの日記
  • http://tamachan.club.kyutech.ac.jp/~gridbug/spirit/

  • template typedefとか型をマクロの引数にする話とか - 梶本裕介の日記

    http://d.hatena.ne.jp/blanketsky/20071027/1193488871確かに現行のC++にはtemplate typedefが無いのですが,metafunctionで代用するのが普通です(C++ユーザの普通って人によってかなり差がある気もしますけど). template class T> struct make_heap { typedef priority_queue, greater > type; }; make_heap::type heap; もちろん今回のようなケースではこちらをお勧めします.次に,マクロの引数としての型の話なのですが, FOO((pairint, int>)) foo; のようにすれば,(pair)を1つの引数と解釈できます.ただ,この場合マクロ側で型の周りに付いたパーレンが邪魔になります.型をパーレンで括って記述できる場所と

    blanketsky
    blanketsky 2008/01/18
    やっと理解した。templateは奥が深い。
  • google-perftools(tcmalloc)の使い方 - moratorium

    google-perftools(tcmalloc)の使い方 2007-12-17 (Mon) 22:59 Google OSS PFIでは毎週1人適当な話題で発表しているのですが、この間「GooglePerfToolsの使い方」という軽いお題で発表した資料を公開してみます。メモリ周りの問題は大変ですよね…。 google-perftools - Fast, multi-threaded malloc() and nifty performance analysis tools 肥え続けるTomcatと胃を痛めるトラブルハッカー ローテクなメモリ使用量監視方法 特にC++で長期運用中のメモリリークに苦しんでおられる方には役立つかと思います。基的にドキュメントの日語訳ですが。SlideShareだとなぜか図がずれるので、元ファイルをこちらに置いておきます。 | View | Upload

  • C++アプリケーションの効率的なテスト手法(CppUnit編) ― @IT

    第2回 C++アプリケーションの効率的なテスト手法(CppUnit編):連載 C++開発者のための単体テスト入門(1/4 ページ) 連載目次 前回は単体テストの重要性を示し、従来のC/C++でのテスト手法であるprintf関数やassertマクロを使ったテストを紹介しました。この2つのテスト手法は開発環境(コンパイラとライブラリ)さえあれば利用でき、その使い方も簡単です。しかしながら、いずれも系統立てて、効率よくテストを行うには力不足の感が否めません。 今回は、Visual C++ 2005 Express Editionを含むVisual Studio 2005(以後、VS 2005)で利用できる代表的な単体テスト・フレームワーク(Unit Test Framework)の1つである「CppUnit」を紹介します。 ■単体テスト・フレームワークとは? 前回、「バグは早期発見が望ましい。早

    C++アプリケーションの効率的なテスト手法(CppUnit編) ― @IT
  • Resource acquisition is initialization - Wikipedia

    This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed. Find sources: "Resource acquisition is initialization" – news · newspapers · books · scholar · JSTOR (December 2012) (Learn how and when to remove this message) Resource acquisition is initialization (RAII)[1] is a pro

  • C/C++ pitfalls

    C/C++共通 8 byteアラインメント 構造体の代入は=かbcopyか |は==より弱い 可変引数を持つ関数をマクロで使う C++のみ undefined reference to virtual table ライブラリ関数 inet_ntoa 8 byteアラインメント 普通アラインメントは4 byte(1 word)だが、64 bitの型を使うと当然 8 byteになる。NetBSDのlibcのmallocはアラインメントを4 byteと考え ているのでint64_tなどを使うとうまくいかない。 構造体の代入は=かbcopyか 構造体の代入には代入演算子=とbcopyのどちらを使えばいいのだろうか。 gccでは代入演算子を使うと1 wordづつ読んでは書きを展開して行ない、 bcopyを使うとループで行なっている。つまり代入演算子を使った方が 高速だがコード量が多くなる。カーネルで

  • stringstreamの罠 - C/C++サンプル

    stringstreamの使いかたはcoutと同様に「 1: #include<iostream> 2: #include<sstream> 3: 4: using namespace std; 5: 6: int main( int argc, char **argv ) 7: { 8: stringstream ss; 9: 10: for( int i=0; i<10; i++ ){ 11: ss << "sample" << i << ".dat"; 12: cout << ss.str() << endl; 13: } 14: 15: return 0; 16: } 「sample0.dat」「sample1.dat」...「sample9.dat」と1行ずつ表示させたいわけだが、これを実行するとどうなるかわかるだろうか?実行結果は以下の通りである。 sample0.da

    blanketsky
    blanketsky 2007/02/18
    ss.str("");