<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/cxxcpp/">
    <title>cealbeit2009-講習とかwiki</title>
    <link>http://w.atwiki.jp/cxxcpp/</link>
    <atom:link href="https://w.atwiki.jp/cxxcpp/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>cealbeit2009-講習とかwiki</description>

    <dc:language>ja</dc:language>
    <dc:date>2009-06-16T11:56:56+09:00</dc:date>
    <utime>1245121016</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/cxxcpp/pages/12.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/cxxcpp/pages/15.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/cxxcpp/pages/1.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/cxxcpp/pages/2.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/cxxcpp/pages/14.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/cxxcpp/pages/13.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/cxxcpp/pages/3.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/cxxcpp/pages/4.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/cxxcpp/pages/5.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/cxxcpp/pages/6.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/cxxcpp/pages/12.html">
    <title>質問と回答</title>
    <link>https://w.atwiki.jp/cxxcpp/pages/12.html</link>
    <description>
      ・コメントのネストとは何か
テキストには例がない。普通にcプログラムを書いているとわりとよく遭遇する。
 int main()
 {
   int a=0;
   /* ②if文いらねーや。
   if(a==0) /* ①ここに説明を書いた。 */ 実際はここでコメントが終了。
   {
   }
   ②ここまでのつもり */
 }

・誤植

・アクセス指定子

・真偽値
if, while, forの第二項は式の真偽値を評価する。
真偽値というのは、その式があっている(true)か間違っている(false)かということ。
式が論理式じゃない場合は、値が「0」の場合はfalse、「非0」の場合はtrue

・namespace stdとは
同じ名前は同じものと判断されるので、ライブラリを使うなど、異なるプログラム間で名前が衝突するとコンパイルとかリンクができなくなる。
c++ではnamespaceを作ることでライブラリの互換性を高めている。
ほかの言語ではmoduleとか呼ばれる時もある。

stdは標準名前空間で、たいていのc++を謳う環境にはくっついている。
たいていの環境で使える関数とかクラス群が定義されている。
（それでも微妙な互換性の問題があったりするらしいけど。

・const

・インライン関数はよく使うものなのか
よく使うというか、
高速化したいなら気合い入れて使わないと大して早くならない。
性能はけっこう環境依存なので、
高速化をやろうとしたら、実行されるコードに対していろんな種類のcpuごとにクロック数をにらみながらインラインを切り替えたりループを書き換えたり...みたいな作業がいるっぽい。
しかしそれよりもむしろアルゴリズムを改善したほうが速かったりする。

・共用体
構造体がデータを並べて保持するのに対して
共用体はデータを重複させて保持する。
メモリの少ない環境とか、大量のメモリを消費するプログラムに使われたりする。
いわゆる、ゆとりには扱えない代物だが、メンテナンス性は微妙。

・enum
中身はintとかの形で保持されるが、値のとれる範囲を制限するのに結構有効。
 #define EULAR 1
 int a=EULAR;
 if(a==EULAR)
とかよりも
 enum demethod{EULAR, HEUN, RUNGEKUTTA};
 demethod a=EULAR;
 if(a==EULAR)
とかのほうが間違ってたらコンパイルエラー出るし結構お得。

・線の描画
Bresenhamのアルゴリズムとか？
コンソールでもできるだろうけどなんかいろいろめんどくさいぜ。

・2章末の問3の意図が不明
確かに不明。

・オーバーロードは名前が重複しているようだが
コンパイル時に引数の型がチェックされ、内部というかオブジェクトファイルではそれぞれ別の名前としてコードが生成されるので、
実際には重複していないはず。

・forとかでまわすiをグローバルにおくとどうなるんだ
 for(int i=0;i&lt;100;++i)
とかのなどの記述がたくさん出てくるが、iをグローバルにおくと効率化できないか。
ローカルにおくときのメモリ使用量のことを心配しているなら、スタックが解放されるタイミングで解放されるのでそれほど問題にならない。
また、forの内部で関数を呼び出す場合に、グローバルアクセスがあるとコールスタックを自前で作る羽目になっていろいろたいへん。
 int i;
 int func2()
 {
   i=1;
 }
 func1()
 {
   for(i=0;i&lt;100;++i)
   {
     func2();
   }
 }
とかすると、あっというまに無限ループが完成。古いBASICとかでローカル変数がなかったときはグローバル変数の使い回しにそうとう頭をひねって設計していたに違いない。
また、キャッシュとかレジスタのからみで、ローカル変数にした方がコンパイラはレジスタに乗せやすい。

・デストラクタでメモリ解放するクラスのコピー
コピーコンストラクタ、代入演算とかを参照
immutableというのもある。

・実引数と仮引数の名前はテキストでは異なることが多い
同じでもいい。

・配列のコピー、forとかを使わずに
std::vectorとかは内部に隠蔽されている

・配列に宣言できる最大要素数
スタックフレームのサイズに関連

・ソート、木、リストとかの基本的なアルゴリズム
知識はあった方がいいけど、基本的なアルゴリズムはすでにいろいろ用意されていることが多い。

・new演算子とかで確保したメモリを解放しない
よいosなら終了時にとりあえず解放してくれるけど、基本的には解放した方がいい。
長時間動き続けるプログラムや、確保・解放をたくさん繰り返すプログラムでは致命的。

・2次元配列でスタックに確保した領域は、連続が保証されているか
保証されている

・代入演算子の戻り値
 a=1
などの式のデフォルトの戻り値は代入された値で、この場合は1
代入演算子のオーバーロードを行うとこの限りではないけど、これにはずれると使いにくくなることが多い。
デフォルトの形の代入演算子はチェインができるところが便利で
 a=b=c=0
とかやると
cに0を代入
bに(c=0)すなわち0を代入
aに(b=0)すなわち0を代入
の順で評価されて、全部に値が入る。

・参照とポインタは原理的にどこが違うのか
C++の参照は変更ができないのとNULLがとれない。それ以外は同じようなもの。
NULLは場合によっては無理矢理とることもできるだろうけど、やらないほうがいいのは確か。
コンパイラの実装としてポインタを使うこともあるし、単に別名をつけるだけのときもある。
別名をつけるだけにできるなら、コンパイラとしてはさらなる最適化がより簡単に可能になるはず。
というわけで、C++ではできるだけ参照を使うことをおすすめしてみる。

・演算子のオーバーロード

・オーバーロードのあいまいさ

・関数のアドレス

・constについて

・staticについて

・仮想基本クラスについて


----    </description>
    <dc:date>2009-06-16T11:56:56+09:00</dc:date>
    <utime>1245121016</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/cxxcpp/pages/15.html">
    <title>アセンブリコードの出力</title>
    <link>https://w.atwiki.jp/cxxcpp/pages/15.html</link>
    <description>
      まあググれば出てくると思うけど
vcでアセンブリコードを出力してみる方法。
どんなコードが出てくるのかなーという参考程度に。

1. visual studioで設定する。

&amp;ref(vcasm.png)

2. または「visual studio 200x コマンドプロンプト」からやる。
(pathとかを自動的に通してくれる。)

&amp;ref(vccmd.png)

で、ファイルの置いてあるディレクトリに移動してコンパイルする。
たとえばファイルが「d:\user_data\Documents\C\local_vs_global.c」だったら

 &gt;d:
 &gt;cd D:\user_data\Documents\C
 &gt;cl /FAs /Ox local_vs_global.c

でokなはず。
/Oxは最大限の最適化なので、いろいろへんてこな最適化をしてくれて楽しい。

たとえば
 int g_val;
 void func1()
 {
 	int a=g_val;
 	++a;
 	g_val=a+2;
 }
 void func2()
 {
 	int a=g_val, b=g_val&lt;&lt;1;
 	++a;
 	g_val=a-b;
 }
 int main()
 {
 	func1();
 	func2();
 	return 0;
 }
これぐらいの小さいコードなら、g_valがグローバルなのにもかかわらず、ちゃっかりレジスタに乗ったりする。    </description>
    <dc:date>2009-06-12T16:21:24+09:00</dc:date>
    <utime>1244791284</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/cxxcpp/pages/1.html">
    <title>トップページ</title>
    <link>https://w.atwiki.jp/cxxcpp/pages/1.html</link>
    <description>
      講習とかのwiki

ceのサーバが外部公開できればいいんだろうけど
セキュリティーとかいろいろあって微妙みたい。
まあそれは仕方無いよね。

プロジェクトはtrac lightingとかが使えそうなんだけどうだろうね。

[[質問と回答]]
[[進め方]]
[[参考文献]]
[[アセンブリコードの出力]]

----    </description>
    <dc:date>2009-06-12T16:02:11+09:00</dc:date>
    <utime>1244790131</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/cxxcpp/pages/2.html">
    <title>メニュー</title>
    <link>https://w.atwiki.jp/cxxcpp/pages/2.html</link>
    <description>
      **メニュー
-[[トップページ]]
-[[質問と回答]]
-[[進め方]]
-[[参考文献]]
-[[アセンブリコードの出力]]

//**更新履歴
//#recent(20)

&amp;link_editmenu(text=ここを編集)    </description>
    <dc:date>2009-06-12T16:01:49+09:00</dc:date>
    <utime>1244790109</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/cxxcpp/pages/14.html">
    <title>参考文献</title>
    <link>https://w.atwiki.jp/cxxcpp/pages/14.html</link>
    <description>
      プログラミングに関する面白い記事とか

いろんな疑問に答えてくれそう...
[[プログラミングの謎を解明する：ITPro&gt;http://itpro.nikkeibp.co.jp/article/COLUMN/20090603/331227/?ST=develop]]

最近関数型に傾倒...
[[第7回 関数脳のつくり方　First Season：ITpro&gt;http://itpro.nikkeibp.co.jp/article/COLUMN/20090224/325385/?ST=develop&amp;P=1]]    </description>
    <dc:date>2009-06-12T16:01:28+09:00</dc:date>
    <utime>1244790088</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/cxxcpp/pages/13.html">
    <title>進め方</title>
    <link>https://w.atwiki.jp/cxxcpp/pages/13.html</link>
    <description>
      週に何回か集まって質問してそれに答える感じですが
もっとほかにやり方があるだろうという意見があれば。

案

・1日1個質問を考えてきてメールする
・質問を考えてくる→分かる人がいればそれに答える
・教えてる人も質問を作ってくる

----    </description>
    <dc:date>2009-05-31T20:58:19+09:00</dc:date>
    <utime>1243771099</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/cxxcpp/pages/3.html">
    <title>右メニュー</title>
    <link>https://w.atwiki.jp/cxxcpp/pages/3.html</link>
    <description>
      **更新履歴
#recent(20)


&amp;link_editmenu2(text=ここを編集)
    </description>
    <dc:date>2009-05-31T20:37:11+09:00</dc:date>
    <utime>1243769831</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/cxxcpp/pages/4.html">
    <title>プラグイン/ニュース</title>
    <link>https://w.atwiki.jp/cxxcpp/pages/4.html</link>
    <description>
      * ニュース
@wikiのwikiモードでは
 #news(興味のある単語)
と入力することで、あるキーワードに関連するニュース一覧を表示することができます
詳しくはこちらをご覧ください。
＝＞http://atwiki.jp/guide/17_174_ja.html


-----


たとえば、#news(wiki)と入力すると以下のように表示されます。


#news(wiki)
    </description>
    <dc:date>2009-05-31T20:37:11+09:00</dc:date>
    <utime>1243769831</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/cxxcpp/pages/5.html">
    <title>まとめサイト作成支援ツール</title>
    <link>https://w.atwiki.jp/cxxcpp/pages/5.html</link>
    <description>
      * まとめサイト作成支援ツールについて
@wikiには[[まとめサイト作成を支援するツール&gt;&gt;http://atwiki.jp/matome/]]があります。
また、
 #matome_list
と入力することで、注目の掲示板が一覧表示されます。

利用例）#matome_listと入力すると下記のように表示されます
#matome_list
    </description>
    <dc:date>2009-05-31T20:37:11+09:00</dc:date>
    <utime>1243769831</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/cxxcpp/pages/6.html">
    <title>プラグイン/編集履歴</title>
    <link>https://w.atwiki.jp/cxxcpp/pages/6.html</link>
    <description>
      * 更新履歴
@wikiのwikiモードでは
 #recent(数字)
と入力することで、wikiのページ更新履歴を表示することができます。
詳しくはこちらをご覧ください。
＝＞http://atwiki.jp/guide/17_117_ja.html


-----


たとえば、#recent(20)と入力すると以下のように表示されます。


#recent(20)
    </description>
    <dc:date>2009-05-31T20:37:11+09:00</dc:date>
    <utime>1243769831</utime>
  </item>
  </rdf:RDF>
