あの非常に初歩的なことかも知れません、いいですか? #include <iostream.h> とやるよりも、 #include <iostream> using std::cout; using std::cin; using std::endl; とかってする意義はあるのでしょうか? <iomanip.h>とかも全て<iomanip>でわざわざ using して使われてます。
>>679 g++だと, -Wnon-virtual-dtor 非仮想デストラクタについて警告する ってのがあるけど,なんだか効いていないようです. あと, -Weffc++ Effective C++ 式の指針からはずれるものについて警告する ってのがあって,これはbase class `class Hoge' has a non-virtual destructor と警告してくれます.
>688 ダウト。 5.2.10-8 に明示的に書いてあるべ。 | 8 The null pointer value (4.10) is converted to the null pointer value of the destination type. 従って、reinterpret_cast<char*>(0) は char* 型のヌルポインタになる。 後、reinterpret_cast による変換は実装定義だからビットパターンが同じになるとは限らない。 サイズが十分なら「戻したとき」に同じになるだけ(5.2.10-5)。
まずこんな関数が有るとして bool Foo(){ return false; } でこの時、 main(){ int a = 0; bool b = true; if (a == 0 && b || Foo()) // A a = 1; if (a == 0 && b || Foo()) // B a = 1; } と言う事をするとAではFoo()は呼ばれません。 これはbがtrueだからFooを実行しなくともifは真になる為、呼ばれないのは解ります。 しかしBではFoo()が呼ばれてしまいます。 漏れ的考えではa=1になってる為に最初のa == 0で偽になり、その後の条件は実行されないと思っていましたが・・・。 これは一体何故でしょう? なお、コンパイラはVC++6.0です。