テキストには例がない。普通にcプログラムを書いているとわりとよく遭遇する。
int main()
{
int a=0;
/* ②if文いらねーや。
if(a==0) /* ①ここに説明を書いた。 */ 実際はここでコメントが終了。
{
}
②ここまでのつもり */
}
if, while, forの第二項は式の真偽値を評価する。
真偽値というのは、その式があっている(true)か間違っている(false)かということ。
式が論理式じゃない場合は、値が「0」の場合はfalse、「非0」の場合はtrue
同じ名前は同じものと判断されるので、ライブラリを使うなど、異なるプログラム間で名前が衝突するとコンパイルとかリンクができなくなる。
c++ではnamespaceを作ることでライブラリの互換性を高めている。
ほかの言語ではmoduleとか呼ばれる時もある。
stdは標準名前空間で、たいていのc++を謳う環境にはくっついている。
たいていの環境で使える関数とかクラス群が定義されている。
(それでも微妙な互換性の問題があったりするらしいけど。
よく使うというか、
高速化したいなら気合い入れて使わないと大して早くならない。
性能はけっこう環境依存なので、
高速化をやろうとしたら、実行されるコードに対していろんな種類のcpuごとにクロック数をにらみながらインラインを切り替えたりループを書き換えたり...みたいな作業がいるっぽい。
しかしそれよりもむしろアルゴリズムを改善したほうが速かったりする。
構造体がデータを並べて保持するのに対して
共用体はデータを重複させて保持する。
メモリの少ない環境とか、大量のメモリを消費するプログラムに使われたりする。
いわゆる、ゆとりには扱えない代物だが、メンテナンス性は微妙。
中身はintとかの形で保持されるが、値のとれる範囲を制限するのに結構有効。
#define EULAR 1
int a=EULAR;
if(a==EULAR)
とかよりも
enum demethod{EULAR, HEUN, RUNGEKUTTA};
demethod a=EULAR;
if(a==EULAR)
とかのほうが間違ってたらコンパイルエラー出るし結構お得。
Bresenhamのアルゴリズムとか?
コンソールでもできるだろうけどなんかいろいろめんどくさいぜ。
確かに不明。
コンパイル時に引数の型がチェックされ、内部というかオブジェクトファイルではそれぞれ別の名前としてコードが生成されるので、
実際には重複していないはず。
- forとかでまわすiをグローバルにおくとどうなるんだ
コピーコンストラクタ、代入演算とかを参照
immutableというのもある。
- 実引数と仮引数の名前はテキストでは異なることが多い
同じでもいい。
std::vectorとかは内部に隠蔽されている
スタックフレームのサイズに関連
知識はあった方がいいけど、基本的なアルゴリズムはすでにいろいろ用意されていることが多い。
よいosなら終了時にとりあえず解放してくれるけど、基本的には解放した方がいい。
長時間動き続けるプログラムや、確保・解放をたくさん繰り返すプログラムでは致命的。
- 2次元配列でスタックに確保した領域は、連続が保証されているか
保証されている
a=1などの式のデフォルトの戻り値は代入された値で、この場合は1
代入演算子のオーバーロードを行うとこの限りではないけど、これにはずれると使いにくくなることが多い。
デフォルトの形の代入演算子はチェインができるところが便利で
a=b=c=0とかやると
c<-0, b<-(c=0), a<-(b=0)の順で評価されて、全部に値が入る。
ほとんど同じだが、参照は基本的にNULLがとれない。
無理矢理とることもできるけど、やらないほうがいい。