C/C++

経過時間計測

あかん。高精度時間計測のやり方を何度やっても忘れてしまう。以前こんなメモを残したのに、コード例を掲載するのを忘れたために、即活用するという点ではまるで役に立たなかった。今度こそ。俺は保存するぞ・・・保存をよぉ・・・ 【活用機会】 ミリ秒から…

std::unique_ptr のnullチェック

std::unique_ptr<MyObject> ptr(new MyObject()); if (nullptr != ptr.get()) { // ... } なんてことはやらなくてよくて、operator boolという便利なもんが用意されているらしく、 std::unique_ptr<MyObject> ptr(new MyObject()); if (ptr) { // ... } でよいそうだ。またひとつ</myobject></myobject>…

参照外しは四則演算子よりも結合優先度が高い

たまたま見かけただけだが、ネット上で不可思議な問答に出くわした。http://detail.chiebukuro.yahoo.co.jp/qa/question_detail.php;_ylt=A7YWPRXdr3FTZxMA39vl_PN7?qid=11118107201これの回答者は全員間違っているように見えるのは私の気のせいだろうか。「…

C++で迷走してみる

C++は色々なことができて面白い。 それゆえ、うまくプログラムを構築するのが難しいと思うこともある。 作っているうちに、どれが最適なコーディングなのかわからなくなってしまうのだ。今回はすごく単純なクラスを作りながら、同じ動きをするけど、どのやり…

長すぎる名前空間に別名をつける

それができるということをつい先日に知った。 Javaにはパッケージというものがって、たとえば、パッケージ名を package jp.co.my_company_name.app_name; public class MyClass { // パッケージ内で一意な名前であれば名前衝突は起きない } のようにすること…

C言語初心者用スキルチェック

ここのチェック項目の回答例と補足 (リンク先のサイトと私は無関係です。初心者のスキルチェックとしてわりと妥当だと感じたので、引用させてもらっています。) printf関数が何をする関数か知っている。 回答:第二引数以降の引数を第一引数の書式化に従っ…

未定義演算

変数への書き込みをしている式の中で2回以上値を読み取ろうとした場合の動作は未定義。 i++ + i++; v[i] = i++; f(v[i], i++); http://www.libjingu.jp/trans/bs_faq2-j.html#evaluation-order

rvalue reference

最近になってrvalue referenceというものを知りました。 まだきちんと理解できていない可能性もありますが、一応メモ書き。私は今まで以下のようなオブジェクトそのものを値返却する関数の作成を避けていました。 class A { public: A() : v(1000000) {} std…

C++ではprivateな仮想関数をオーバーライドすることができる

バッドノウハウかもしれないので注意。 一瞬「あれ、おかしい」と思ったのでメモ。 Javaとは違うところ。 派生クラスでのオーバーライドが必要、かつ、派生クラスから直接呼び出す必要のない仮想関数を定義するのには便利かもしれない。 class Parent { publ…

templateクラスのfriend指定は前方参照が必要

通常は、クラスのfriend指定時に、フレンドクラスの実体が存在する必要はない。 class A { friend class B; // OK }; class B {}; templateクラスをfriend指定する場合は前方宣言をしないとコンパイルエラーになる。 class A { friend class B<int>; // Explicit </int>…

高精度時間取得関数メモ

ミリ秒以下の精度が不要な場合 → time関数 ミリ秒、マイクロ秒までの精度が必要な場合 → gettimeofday関数 ナノ秒までの精度が必要な場合 → clock_gettime関数 システム時刻ではなく、CPUクロック使用時間を知りたい場合 → clock関数 ※sys/timeb.hのftime関…

template派生クラスから基底クラスへのメンバアクセスは明示的に指定する

完全に忘れていた 【コンパイルエラー】 template <class T> class Parent { int m; }; template <class T> class Child : public Parent<T> { void method() { printf("%d", m); // undeclared identifier } }; 【修正版】 template <class T> class Parent { int m; }; template <class T> class C</class></class></t></class></class>…

配列とポリモーフィズム

C++はちゃんと理解すれば面白いけど、 ちゃんと理解するのが大変だから、 ちゃんと使うのが難しい言語だと思います。標題についてちょっと気になったことがあったのでメモ書き。 私がちゃんと理解できていなかっただけで、ごくごく当たり前のことかもしれま…