一定期間更新がないため広告を表示しています
![cppcheck 日本語マニュアル | 一人ぼっちの共鳴](https://cdn-ak-scissors.b.st-hatena.com/image/square/2302e44c95c7e474fefb218540004f95dc47a4bb/height=288;version=1;width=512/https%3A%2F%2Fimaging.jugem.jp%2Ftemplate%2Fimg%2Fjugem_og-image.png)
静的解析ツールって商用のものだと結構あるわけですが、 まぁ、基本的にこんなツールは有用性を示してもぽんぽん買ってもらえる訳もないので オープンソースに依存するわけです。 で、C++ならSourceForge.net: cppcheck かなあと思ってプロジェクトにかけてみたりするわけです。 静的解析ツールに求めるところは 「ノイズは少なく、でも怪しいところはちゃんと教えてね」 ということで、ずらーっと大量にerrorやwarningがでてもうんざりするわけです。 逆にあまりにも出さないと意味がないわけで。 ここが難しいところではありますが、 はてさて、まぁ、気休めだなあと思ってかけてました。 自分がこれがいいなと思ったのはSTLをちゃんと見てくれるよっていうところで、 std::vector<int> vv; for (std::vector<int>::iterator it = vv.
この記事はBoost Advent Calendar 2011の参加記事です。 Boostの数学ライブラリの一部を紹介したいと思います。 複素関数としての逆三角関数・逆双曲線関数C99の逆三角関数・逆双曲線関数を移植したものです。C++11に追加されたので、そのうち新規には使われなくなるかもしれませんが……。 逆三角関数・逆双曲線関数は多価関数なのでどういった分枝を取るかが問題になります。分枝についてBoostのドキュメントに書かれていないので明記しておきます。 arccos #include <boost/math/complex/acos.hpp> template <typename T> std::complex<T> acos(const std::complex<T>& z); 上で、実関数としてのと一致し、で連続となるように分枝をとります。 arcsin #include <
この記事はC++11 Advent Calendar 2011の参加記事です。(書きかけ) C++11には、C99の数学関数や浮動小数点数を扱う関数が追加されました。追加された関数のうち便利なものをいくつか紹介したいと思います。 C99との相違点今回紹介する関数はC99由来のものですが、C++11への追加に際して変更があります。1つ目の変更は関数の名前です。Cでは関数のオーバーロードができないので、float用、double用、long double用の関数が別の名前を使わなければならないのに対し、C++では同じ名前で使えます。例えばC99のガンマ関数は float tgammaf(float); double tgamma(double); long double tgammal(long double); のようにfloat, long doubleのものには接尾辞が付いてしまいます。
これは,C++11 Advent Calendar 2011 参加記事です.現在,開催されている Advent Calendar の一覧は Advent Calendar 2011 (jp) 開催予定リスト - Life like a clown を参照下さい. C++11 (C++0x) に関しての情報は 本の虫 や Faith and Brave - C++で遊ぼう でかなり詳細な記述がありますので,情報を探す場合は site:cpplover.blogspot.com や site:d.hatena.ne.jp/faith_and_brave 辺りを指定してググってみると良いかもしれません.この記事でも,該当ブログの記事をメインにリンク集を作成しています. 尚,自分の理解が追い付いてないものや見逃したもの等があるので,結構な抜けがあるかと思います. 概要 ざっと概要を知りたい場合は,
本記事は、Boost Advent Calendar 2011 の9日目の記事です。 本稿では Boost.Wave という C/C++ プリプロセッサライブラリについて書きます。 Boost.Wave とは Boost.Wave は、パーサコンビネータライブラリ Boost.Spirit によって書かれた C/C++ プリプロセッサライブラリです。 C/C++ プリプロセッサは言うまでもなく、某社のサーバでも利用されているという純粋関数型言語です。 主に HTML ジェネレータとして活用されているという噂です。 Boost.Wave を使うことによって、C/C++ プリプロセッサを C++ のプログラム内で処理したり、 あるいはプリプロセス中の各処理にフックして解析を行なったりすることが出来ます。 Quick Start まずは 本家ドキュメント の Quick Start のコードを読
結論:C++11で新しく追加されたstd::quick_exitを使え。 プログラムの終了は、すみやかに行われるべきである。なにしろ、終了なのだ。終了にもたついていてはストレスがたまる。とくに、多くの実行環境では、プログラムの外部から、プログラムを強制終了させる方法がある。強制終了は大抵、プログラムの意志を無視して、強制的に一瞬で行われる。外部からできるのであれば、内部からできてしかるべきである。 なぜプログラムは終了時にもたつくのか。それは、終了時に特別な処理を必要とする場合もあろう。たとえば、数GBものデータを遅いHDDに書きださねばならない場合もあるだろう。これは妥当な理由である。では、確保したメモリやその他のリソースの解放処理はどうか。これは、疑問である。というのも、多くの近代的なOSでは、プログラムは個々に独立している。プログラムには独自の仮想メモリ空間が与えられ、必要に応じて物
luajitがアツイという話を聞きつけたのでpypyと比較してみた。 luajitは id:pcl:20100203 を参考に。 -- prime.lua function isprime(n, primes) nsqrt = n ^ 0.5 for i = 1, #primes do if nsqrt < primes[i] then break end if n % primes[i] == 0 then return false end end return true end primes = {} for i = 2, arg[1] * 1 do if isprime(i, primes) then primes[#primes + 1] = i end end print(primes[#primes]) --確認用 $ time lua5.1 prime.lua 1000000
「ウェブリブログ」は 2023年1月31日 をもちましてサービス提供を終了いたしました。 2004年3月のサービス開始より19年近くもの間、沢山の皆さまにご愛用いただきましたことを心よりお礼申し上げます。今後とも、BIGLOBEをご愛顧賜りますよう、よろしくお願い申し上げます。 ※引っ越し先ブログへのリダイレクトサービスは2024年1月31日で終了いたしました。 BIGLOBEのサービス一覧
最近boostを真面目に使い始めたので、その辺を書いてみます。 今回はudpサーバの作り方です。 TCPじゃなくてUDP?って感じですが、UDPの方がシンプルなのでまずはこちらを理解しましょう。 #include <ctime> #include <iostream> #include <string> #include <boost/array.hpp> #include <boost/bind.hpp> #include <boost/shared_ptr.hpp> #include <boost/enable_shared_from_this.hpp> #include <boost/asio.hpp> using boost::asio::ip::udp; class udp_server { udp::socket socket_; udp::endpoint remote_en
Qt Labs Japan では Nokia のクロスプラットフォームアプリケーション開発フレームワークである Qt に関する日本語での情報を発信しています。
正式な呼び方かどうかわかりませんが、テンプレートを再帰的に呼び出すという意味です。 プログラムには連接・選択・反復の3つの要素が必要ですが、テンプレートを使用した連接・選択は今まで見てきた通りですね。 で、最後に反復をテンプレートの再帰呼び出しで実現しようという話です。 1〜Nまでの総和 //1〜Nまでの総和を求める(一般形) template< unsigned int N > struct sum { static const unsigned int value = N + func< N - 1 >::value; }; //N==1のときの特殊化 //再帰的に呼び出すので、必ず終了条件が必要。(再帰しない特殊化バージョン) template<> struct sum< 1 > { static const unsigned int value = 1; }; 実行時ではなく、コン
特性。テンプレート引数に渡された型、定数によって動作を切り替える。 例えば、shared_ptr< T >でvoidを渡すと、 shared_ptr< void > p; operator*()の戻り値の型がvoid&になるのでコンパイルエラーになってしまいます。 template < typename T > class shared_ptr { ... T& operator*()const{ return *ptr; } ... }; Tがvoid以外→T& Tがvoid→void のように、Tの型によって戻り値の型を選択したいわけです。 ちなみにtemplate内の関数の{...}は呼び出し処理を書かない限りコンパイルされないので、voidでreturnを記述していてもコンパイルエラーになりません。 では、さっそくoperator*()の戻り値の型を決定するための特性クラスを作って
最近仕事について色々考えています。今の環境は正直自分のためになっていないので、何とか変える努力というかそういうのが必要だと切実に感じています。 とまぁそういうことは置いておいて、今回はC++の話題です。 boostとかC++0xとか、最新鋭の強力なライブラリを使いこなしている方にとっては、traitsというテクニックは最早当然のものだと思います。 このtraitsというテクニック、特にSTLで非常に多く、そして深く利用されています。 とは言っても、中々理解しずらいテクニックでもあります(少なくとも私にとって)。 なので、事例を示しつつ、なんとか理解できるようになりたいと思います。 まずは以下のようなクラスがあったとします。継承を利用しています。 class Hoge { pubilc: virtual ~Hoge() {} virtual char func() = 0; }; class
すぐに忘れるのでメモ.std::vector には reserve() メソッドと resize() が存在しますが,これらのメソッドと size() の関連があやふやだったのでテストをしてみました. #include <vector> #include <iostream> int main(int argc, char* argv[]) { // TEST 1: コンストラクタでサイズを指定した場合. std::vector<int> v1(512); std::cout << "TEST 1: size: " << v1.size() <<", capacity: " << v1.capacity() << std::endl; // TEST 2: デフォルトコンストラクタで初期化した直後. std::vector<int> v2; std::cout << "TEST 2: si
Boost.Optional Must Go - 野良C++erの雑記帳 Boost.Optional Must Go (2) - 野良C++erの雑記帳 最近、何回かに分けて、 Boost.Optional について、(細かい)不満を日記に書いてきました。 これは別に Boost.Optional が嫌いだから不満を書いた訳ではなく、むしろ その逆、 Boost.Optional が便利な分、逆に不満点が目立つので書いていたわけですが、 よく考えたら、 Boost.Optional の便利さを、纏まった記事で書いていないなー、 と、そう思い至ったので、この辺で Boost.Optional を徹底的に推奨する記事でも書いてみようかな、 というわけで、さんざん既出なネタばかりですが、折角なので書いてみることにしましたよ。 冒頭に挙げた以外で参考になるような記事は、この辺でしょうか: C++
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く