<?xml version="1.0" encoding="shift_jis"?>
<rdf:RDF xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  xmlns:image="http://purl.org/rss/1.0/modules/image/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"
  xmlns="http://purl.org/rss/1.0/">
  <channel rdf:about="http://www.codelogy.org/quillpen/rss.cgi">
    <title>Codelogy</title>
    <link>http://www.codelogy.org/quillpen/</link>
    <description>Codelogy: RSS</description>
    <items>
      <rdf:Seq>
        <rdf:li resource="http://www.codelogy.org/quillpen/?entry=69"/>
        <rdf:li resource="http://www.codelogy.org/quillpen/?entry=70"/>
        <rdf:li resource="http://www.codelogy.org/quillpen/?entry=53"/>
        <rdf:li resource="http://www.codelogy.org/quillpen/?entry=52"/>
        <rdf:li resource="http://www.codelogy.org/quillpen/?entry=55"/>
        <rdf:li resource="http://www.codelogy.org/quillpen/?entry=16"/>
        <rdf:li resource="http://www.codelogy.org/quillpen/?entry=54"/>
        <rdf:li resource="http://www.codelogy.org/quillpen/?entry=50"/>
        <rdf:li resource="http://www.codelogy.org/quillpen/?entry=47"/>
        <rdf:li resource="http://www.codelogy.org/quillpen/?entry=46"/>
      </rdf:Seq>
    </items>
  </channel>
  <item rdf:about="http://www.codelogy.org/quillpen/?entry=69">
    <title>構造体によるデータ集約</title>
    <link>http://www.codelogy.org/quillpen/?entry=69</link>
    <description>&lt;div class=&quot;entry-image&quot;&gt;
  &lt;img src=&quot;http://www.codelogy.org/quillpen/image.cgi?entry=69&amp;amp;index=0&quot; alt=&quot;&quot; /&gt;
&lt;/div&gt;
&lt;p&gt;
  個人的な観測範囲内での話ですが、「プログラマ」と呼ばれる人の中には、自分で構造体 (あるいはクラス) を定義することを面倒臭がり、これをしないで済ませようとする人が少なくありません。
  彼らは、本来構造体として集約されるべきデータをプリミティブ (組み込み型) と標準ライブラリなどで与えられたコンテナ型を組み合わせることで表現しようとします。
&lt;/p&gt;
&lt;p&gt;
  例えば、地図上の登録地点の情報を CSV (各列にID, 名前, 緯度, 経度, 解説, ... が格納されている) から読み取るコードは以下のようになるわけです。
  (&lt;code&gt;csvParseLine&lt;/code&gt; は現在開いているCSVファイルから1行分のデータを &lt;code&gt;vector&lt;/code&gt;&amp;lt;&lt;code&gt;string&lt;/code&gt;&amp;gt; として取ってくる関数だと考えてください。)&lt;/p&gt;
&lt;table class=&quot;code&quot;&gt;
&lt;tr&gt;
  &lt;td&gt;
&lt;pre&gt;&lt;em class=&quot;kwd&quot;&gt;class&lt;/em&gt; MyApplication {

    &lt;em class=&quot;cmt&quot;&gt;//地点データ&lt;/em&gt;
    vector&amp;lt;&lt;em class=&quot;usr&quot;&gt;UINT&lt;/em&gt;&amp;gt;   m_vID;          &lt;em class=&quot;cmt&quot;&gt;//ID&lt;/em&gt;
    vector&amp;lt;string&amp;gt; m_vName;        &lt;em class=&quot;cmt&quot;&gt;//名前&lt;/em&gt;
    vector&amp;lt;&lt;em class=&quot;kwd&quot;&gt;double&lt;/em&gt;&amp;gt; m_vLatitude;    &lt;em class=&quot;cmt&quot;&gt;//緯度&lt;/em&gt;
    vector&amp;lt;&lt;em class=&quot;kwd&quot;&gt;double&lt;/em&gt;&amp;gt; m_vLongitude;   &lt;em class=&quot;cmt&quot;&gt;//経度&lt;/em&gt;
    vector&amp;lt;string&amp;gt; m_vDescliption; &lt;em class=&quot;cmt&quot;&gt;//説明&lt;/em&gt;

    &lt;em class=&quot;cmt&quot;&gt;//地点データの読み込み&lt;/em&gt;
    &lt;em class=&quot;kwd&quot;&gt;int&lt;/em&gt; loadLocationData(){

        m_vID         .clear();
        m_vName       .clear();
        m_vLatitude   .clear();
        m_vLongitude  .clear();
        m_vDescription.clear();

        &lt;em class=&quot;kwd&quot;&gt;int&lt;/em&gt; nCount =&lt;em class=&quot;lit&quot;&gt;0&lt;/em&gt;;

        &lt;em class=&quot;kwd&quot;&gt;for&lt;/em&gt; (;;){

            vector&amp;lt;string;&amp;gt; row =csvParseLine();
            &lt;em class=&quot;kwd&quot;&gt;if&lt;/em&gt; (row.size &amp;lt; &lt;em class=&quot;lit&quot;&gt;5&lt;/em&gt;) &lt;em class=&quot;kwd&quot;&gt;break&lt;/em&gt;;    

            m_vID         .push_back(&lt;em class=&quot;kwd&quot;&gt;static_cast&lt;/em&gt;&amp;lt;&lt;em class=&quot;usr&quot;&gt;UINT&lt;/em&gt;&amp;gt;(&lt;a href=&quot;http://ja.wikipedia.org/wiki/Atoi&quot;&gt;atoi&lt;/a&gt;(row[&lt;em class=&quot;lit&quot;&gt;0&lt;/em&gt;])));
            m_vName       .push_back(row[&lt;em class=&quot;lit&quot;&gt;1&lt;/em&gt;]);
            m_vLatitude   .push_back(&lt;a href=&quot;http://ja.wikipedia.org/wiki/Atof&quot;&gt;atof&lt;/a&gt;(row[&lt;em class=&quot;lit&quot;&gt;2&lt;/em&gt;]));
            m_vLongitude  .push_back(atof(row[&lt;em class=&quot;lit&quot;&gt;3&lt;/em&gt;]));
            m_vDescription.push_back(row[&lt;em class=&quot;lit&quot;&gt;4&lt;/em&gt;]);

            ++nCount;
        } &lt;em class=&quot;cmt&quot;&gt;//for (;;)&lt;/em&gt;

        &lt;em class=&quot;kwd&quot;&gt;return&lt;/em&gt; nCount;
    };
}&lt;/pre&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;
  &lt;span style=&quot;font-size: 200%; font-weight: bold;&quot;&gt;だからそうじゃねぇだろうが!!&lt;/span&gt;
&lt;/p&gt;</description>
    <dc:date>2010-03-06T10:46:00Z</dc:date>
  </item>
  <item rdf:about="http://www.codelogy.org/quillpen/?entry=70">
    <title>C++の std::unique と、Ruby の Array#uniq の本質的な違い</title>
    <link>http://www.codelogy.org/quillpen/?entry=70</link>
    <description>&lt;p&gt;
  配列から重複した要素を取り除きたいとき、C++ では &lt;a href=&quot;http://ja.wikipedia.org/wiki/Standard_Template_Library&quot;&gt;STL&lt;/a&gt; の &lt;b&gt;std&lt;/b&gt;::&lt;b&gt;unique&lt;/b&gt; を、Rubyでは &lt;a href=&quot;http://www.ruby-lang.org/ja/man/html/Array.html#uniq&quot;&gt;Array#uniq&lt;/a&gt; を使うことが出来ます。
&lt;/p&gt;
&lt;table class=&quot;code&quot;&gt;
&lt;tr class=&quot;caption&quot;&gt;
  &lt;th&gt;C++&lt;/th&gt;
  &lt;th&gt;Ruby&lt;/th&gt;
  &lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;
&lt;pre&gt;&lt;em class=&quot;kwd&quot;&gt;#include&lt;/em&gt; &lt;em class=&quot;str&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/em&gt;
&lt;em class=&quot;kwd&quot;&gt;#include&lt;/em&gt; &lt;em class=&quot;str&quot;&gt;&amp;lt;algorithm&amp;gt;&lt;/em&gt;

&lt;em class=&quot;kwd&quot;&gt;int&lt;/em&gt; main(){

  &lt;em class=&quot;kwd&quot;&gt;int&lt;/em&gt; v[]  = {&lt;em class=&quot;lit&quot;&gt;1&lt;/em&gt;, &lt;em class=&quot;lit&quot;&gt;2&lt;/em&gt;, &lt;em class=&quot;lit&quot;&gt;2&lt;/em&gt;, &lt;em class=&quot;lit&quot;&gt;3&lt;/em&gt;, 3, 3};
  &lt;em class=&quot;kwd&quot;&gt;int&lt;/em&gt; len  = &lt;em class=&quot;kwd&quot;&gt;sizeof&lt;/em&gt;(v) / &lt;em class=&quot;kwd&quot;&gt;sizeof&lt;/em&gt;(v[&lt;em class=&quot;lit&quot;&gt;0&lt;/em&gt;]);
  &lt;em class=&quot;kwd&quot;&gt;int&lt;/em&gt; *end = std::unique(v, v+len);
  &lt;em class=&quot;kwd&quot;&gt;for&lt;/em&gt;(&lt;em class=&quot;kwd&quot;&gt;int&lt;/em&gt; *p = &amp;amp;v[&lt;em class=&quot;lit&quot;&gt;0&lt;/em&gt;]; p != end; ++p)
    std::cout &amp;lt;&amp;lt; *p &amp;lt;&amp;lt; &lt;em class=&quot;str&quot;&gt;' '&lt;/em&gt;;
  &lt;em class=&quot;kwd&quot;&gt;return&lt;/em&gt; &lt;em class=&quot;lit&quot;&gt;0&lt;/em&gt;;
}&lt;/pre&gt;&lt;/td&gt;
  &lt;td&gt;
&lt;pre&gt;v = [&lt;em class=&quot;lit&quot;&gt;1&lt;/em&gt;, &lt;em class=&quot;lit&quot;&gt;2&lt;/em&gt;, &lt;em class=&quot;lit&quot;&gt;2&lt;/em&gt;, &lt;em class=&quot;lit&quot;&gt;3&lt;/em&gt;, &lt;em class=&quot;lit&quot;&gt;3&lt;/em&gt;, &lt;em class=&quot;lit&quot;&gt;3&lt;/em&gt;]
p v.uniq&lt;/pre&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;result&quot;&gt;
    1 2 3&lt;/td&gt;
  &lt;td class=&quot;result&quot;&gt;
    1 2 3&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;
  これらの関数 (メソッド) は全く同じ働きをするように見えますが、よく調べてみると、実は微妙に異なる動作をすることが分かります。
  異なる動作をするのは、具体的には次のようなケースです。
&lt;/p&gt;
&lt;table class=&quot;code&quot;&gt;
&lt;tr class=&quot;caption&quot;&gt;
  &lt;th&gt;C++&lt;/th&gt;
  &lt;th&gt;Ruby&lt;/th&gt;
  &lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;
&lt;pre&gt;&lt;em class=&quot;kwd&quot;&gt;#include&lt;/em&gt; &lt;em class=&quot;str&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/em&gt;
&lt;em class=&quot;kwd&quot;&gt;#include&lt;/em&gt; &lt;em class=&quot;str&quot;&gt;&amp;lt;algorithm&amp;gt;&lt;/em&gt;

&lt;em class=&quot;kwd&quot;&gt;int&lt;/em&gt; main(){

  &lt;em class=&quot;kwd&quot;&gt;int&lt;/em&gt; v[]  = {&lt;em class=&quot;lit&quot;&gt;3&lt;/em&gt;, &lt;em class=&quot;lit&quot;&gt;2&lt;/em&gt;, &lt;em class=&quot;lit&quot;&gt;1&lt;/em&gt;, &lt;em class=&quot;lit&quot;&gt;2&lt;/em&gt;, &lt;em class=&quot;lit&quot;&gt;3&lt;/em&gt;, &lt;em class=&quot;lit&quot;&gt;3&lt;/em&gt;};
  &lt;em class=&quot;kwd&quot;&gt;int&lt;/em&gt; len  = &lt;em class=&quot;kwd&quot;&gt;sizeof&lt;/em&gt;(v) / &lt;em class=&quot;kwd&quot;&gt;sizeof&lt;/em&gt;(v[&lt;em class=&quot;str&quot;&gt;0&lt;/em&gt;]);
  &lt;em class=&quot;kwd&quot;&gt;int&lt;/em&gt; *end = std::unique(v, v+len);
  &lt;em class=&quot;kwd&quot;&gt;for&lt;/em&gt;(&lt;em class=&quot;kwd&quot;&gt;int&lt;/em&gt; *p = &amp;amp;v[&lt;em class=&quot;kwd&quot;&gt;0&lt;/em&gt;]; p != end; ++p)
    std::cout &amp;lt;&amp;lt; *p &amp;lt;&amp;lt; &lt;em class=&quot;str&quot;&gt;' '&lt;/em&gt;;

  &lt;em class=&quot;kwd&quot;&gt;return&lt;/em&gt; &lt;em class=&quot;lit&quot;&gt;0&lt;/em&gt;;
}&lt;/pre&gt;&lt;/td&gt;
  &lt;td&gt;
&lt;pre&gt;v = [&lt;em class=&quot;lit&quot;&gt;3&lt;/em&gt;, 2, 1, 2, 3, 3]
p v.uniqpre&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;result&quot;&gt;
    3 2 1 2 3&lt;/td&gt;
  &lt;td class=&quot;result&quot;&gt;
    3 2 1&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;
  &lt;b&gt;std&lt;/b&gt;::&lt;b&gt;unique&lt;/b&gt; では望んだとおりの出力が得られません。
  これは何故でしょうか。
&lt;/p&gt;</description>
    <dc:date>2010-02-26T18:00:00Z</dc:date>
  </item>
  <item rdf:about="http://www.codelogy.org/quillpen/?entry=53">
    <title>32ビット環境で64ビット整数を扱う (乗法編)</title>
    <link>http://www.codelogy.org/quillpen/?entry=53</link>
    <description>&lt;p&gt;
  これまでの記事では、32ビット環境における64ビットの&lt;q:entry#16&gt;加法&lt;/entry&gt;および&lt;entry@50&gt;減法&lt;/entry&gt;について解説しました。
  いよいよ、ヤマ場である乗法、すなわち「掛け算」のやり方について解説しましょう。
&lt;/p&gt;
&lt;p&gt;
  なお、今回も64ビット整数値を表現するために、以下の &lt;b&gt;QWORD&lt;/b&gt; 構造体を使用します。
&lt;/p&gt;
&lt;table class=&quot;code&quot;&gt;
&lt;tr&gt;
  &lt;td&gt;
&lt;pre&gt;&lt;em class=&quot;kwd&quot;&gt;typedef&lt;/em&gt; &lt;em class=&quot;kwd&quot;&gt;unsigned&lt;/em&gt; &lt;em class=&quot;kwd&quot;&gt;long&lt;/em&gt; &lt;em class=&quot;usr&quot;&gt;DWORD&lt;/em&gt;;

&lt;em class=&quot;kwd&quot;&gt;typedef&lt;/em&gt; &lt;em class=&quot;kwd&quot;&gt;struct&lt;/em&gt; {
    &lt;em class=&quot;usr&quot;&gt;DWORD&lt;/em&gt; dwLow;  &lt;em class=&quot;cmt&quot;&gt;//下位32ビット&lt;/em&gt;
    &lt;em class=&quot;usr&quot;&gt;DWORD&lt;/em&gt; dwHigh; &lt;em class=&quot;cmt&quot;&gt;//上位32ビット&lt;/em&gt;
} QWORD;&lt;/pre&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;</description>
    <dc:date>2010-02-07T13:00:00Z</dc:date>
  </item>
  <item rdf:about="http://www.codelogy.org/quillpen/?entry=52">
    <title>Array クラスを作る (size フィールド編)</title>
    <link>http://www.codelogy.org/quillpen/?entry=52</link>
    <description>&lt;p&gt;
  Java では、配列の要素数をフィールド &lt;code&gt;length&lt;/code&gt; を通じて参照することができます。
&lt;/p&gt;
&lt;table class=&quot;code&quot;&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;pre&gt;&lt;em class=&quot;cmt&quot;&gt;//合計の取得&lt;/em&gt;
&lt;em class=&quot;kwd&quot;&gt;int&lt;/em&gt; sum(&lt;em class=&quot;kwd&quot;&gt;int&lt;/em&gt;[] anData){

    &lt;em class=&quot;kwd&quot;&gt;int&lt;/em&gt; nSum =&lt;em class=&quot;lit&quot;&gt;0&lt;/em&gt;;

    &lt;em class=&quot;kwd&quot;&gt;int&lt;/em&gt; i;
    &lt;em class=&quot;kwd&quot;&gt;for&lt;/em&gt; (i=&lt;em class=&quot;lit&quot;&gt;0&lt;/em&gt;; i&amp;lt;anData.length; ++i){
        nSum +=anData[i];
    } &lt;em class=&quot;cmt&quot;&gt;//i&lt;/em&gt;

    &lt;em class=&quot;kwd&quot;&gt;return&lt;/em&gt; nSum;
}&lt;/pre&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;
  この &lt;code&gt;length&lt;/code&gt; は (おそらく) &lt;b&gt;final&lt;/b&gt; &lt;b&gt;int&lt;/b&gt;、即ち、変更不能な &lt;b&gt;public&lt;/b&gt; フィールドとして定義されており、これに対する代入操作を行おうとすると、コンパイルエラーとなります。
  ところで、この仕組みは Java が「配列のサイズは変更できない」という仕様を有するが故に可能なものであるということに読者諸兄はお気づきでしょうか。
  もし配列のサイズが初期化後に変更可能であるとすれば、&lt;code&gt;length&lt;/code&gt; を &lt;b&gt;final&lt;/b&gt; 修飾することはできません。
  そうなると、&lt;code&gt;length&lt;/code&gt; に対する代入操作を禁止する手立てはなくなってしまうのです。
&lt;/p&gt;
&lt;p&gt;
  一方、C++ ならば、値の変更が可能かつ、外部からの変更が不能なメンバ変数 (を模したインターフェイス) を定義することが可能です。
  このエントリでは、このテクニックを使い、これまでのエントリで作成してきた Array クラステンプレート (&lt;q:entry#30&gt;参照&lt;/entry&gt;) に要素数読み取り専用のメンバ変数 &lt;b&gt;size&lt;/b&gt; を定義します。
&lt;/p&gt;  







</description>
    <dc:date>2009-12-04T23:00:00Z</dc:date>
  </item>
  <item rdf:about="http://www.codelogy.org/quillpen/?entry=55">
    <title>ビット演算の基礎</title>
    <link>http://www.codelogy.org/quillpen/?entry=55</link>
    <description>&lt;p&gt;
  ビット演算を使用すると、1つの整数型データをビット単位で区切って、複数の用途に割り当てることができます。
  例えば、符号なし整数 (&lt;b&gt;unsigned&lt;/b&gt; &lt;b&gt;int&lt;/b&gt;) のデータ長が32ビットの環境であれば、一つの変数で32個の真理値 (&lt;b&gt;bool&lt;/b&gt;: &lt;b&gt;true&lt;/b&gt;/&lt;b&gt;false&lt;/b&gt; に相当) を格納することができます。
  また、これらの真理値を複数個まとめて参照・操作することも可能です。
&lt;/p&gt;
&lt;p&gt;
  しかし最近のプログラミング環境では、潤沢なメモリやライブラリの普及などにより、ビット演算を利用するような場面は、以前と比べて少なくなっています。
  そのため、ある程度長くプログラミングを学んでいるにも関わらず、ビット演算が使えない、あるいはその概念自体を知らないという人も見かけるようになりました。
&lt;/p&gt;
&lt;p&gt;
  というわけで、今回はビット演算の基本中の基本である、ビット値の参照・操作の方法とその手順について解説します。
  ちなみに、当エントリの説明では図のスペース節約のため、8ビット符号なし整数 (&lt;b&gt;BYTE&lt;/b&gt;: &lt;b&gt;unsigned&lt;/b&gt; &lt;b&gt;char&lt;/b&gt;) を操作の対象としていますので、実際に使用する場合は適当なデータ長に置き換えて考えてください。
&lt;/p&gt;
</description>
    <dc:date>2009-11-15T22:30:00Z</dc:date>
  </item>
  <item rdf:about="http://www.codelogy.org/quillpen/?entry=16">
    <title>32ビット環境で64ビット整数を扱う (加法編)</title>
    <link>http://www.codelogy.org/quillpen/?entry=16</link>
    <description>&lt;p&gt;
  通常用いられる整数型 (32ビット符号付き) は -2,147,483,648 〜 2,147,483,647 の範囲の値を表現することができます。&lt;br /&gt;
  殆どのアプリケーションにおいては、この制限が問題になることはまずありません。&lt;br /&gt;
  しかし、この範囲を超える値を扱う必要のあるアプリケーションも存在します。&lt;br /&gt;
  &lt;br /&gt;
  そこで考え付くのが、32ビット環境で64ビット整数を扱うための仕組みを作ることですが、実際にやってみると意外なほどに手間が掛ってしまいます。&lt;br /&gt;
  この記事では、四則演算・10進出力などのプログラムを組むときの手順や考え方について解説していきます。
&lt;/p&gt;
</description>
    <dc:date>2009-09-18T09:32:00Z</dc:date>
  </item>
  <item rdf:about="http://www.codelogy.org/quillpen/?entry=54">
    <title>参照の配列は何故作れないか</title>
    <link>http://www.codelogy.org/quillpen/?entry=54</link>
    <description>&lt;p&gt;
  さて問題です。次のコードの実行結果はどうなるでしょうか？
&lt;/p&gt;
&lt;table class=&quot;code&quot;&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;pre&gt;&lt;em class=&quot;kwd&quot;&gt;#include&lt;/em&gt; &lt;em class=&quot;lit&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/em&gt;

&lt;em class=&quot;kwd&quot;&gt;using namespace&lt;/em&gt; std;

&lt;em class=&quot;kwd&quot;&gt;int&lt;/em&gt; main(){
  &lt;em class=&quot;kwd&quot;&gt;int&lt;/em&gt; a = &lt;em class=&quot;lit&quot;&gt;1&lt;/em&gt;, b = &lt;em class=&quot;lit&quot;&gt;2&lt;/em&gt;, c = &lt;em class=&quot;lit&quot;&gt;3&lt;/em&gt;;
  &lt;em class=&quot;kwd&quot;&gt;int&lt;/em&gt; &amp;amp;n[&lt;em class=&quot;lit&quot;&gt;3&lt;/em&gt;] = {a, b, c};

  &lt;em class=&quot;kwd&quot;&gt;for&lt;/em&gt;(&lt;em class=&quot;kwd&quot;&gt;int&lt;/em&gt; i = &lt;em class=&quot;lit&quot;&gt;0&lt;/em&gt;; i &amp;lt; &lt;em class=&quot;lit&quot;&gt;3&lt;/em&gt;; ++i)
    cout &amp;lt;&amp;lt; n[i] &amp;lt;&amp;lt; &lt;em class=&quot;lit&quot;&gt;' '&lt;/em&gt; ;
  cout &amp;lt;&amp;lt; endl;

  &lt;em class=&quot;kwd&quot;&gt;return&lt;/em&gt; &lt;em class=&quot;lit&quot;&gt;0&lt;/em&gt;;
}&lt;/pre&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;
  見出しを見た皆様のお察しの通り、正解は、「そもそもコンパイルされない」です。
&lt;/p&gt;
&lt;table class=&quot;code&quot;&gt;
&lt;tr&gt;
  &lt;td class=&quot;result&quot;&gt;
code.cpp: In function `int main()':&lt;br /&gt;
code.cpp:7: error: declaration of `n' as array of references&lt;br /&gt;
code.cpp:10: error: `n' undeclared (first use this function)&lt;br /&gt;
code.cpp:10: error: (Each undeclared identifier is reported only once for each function it appears in.)&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;
  このように、C++では参照の配列を作成することは出来ません。&lt;br /&gt;
  しかし、一体何故でしょうか？
  参照の配列によって簡潔に記述できるような処理に出くわすこともままありますし、参照の配列を作ることが原理的に不可能であるとは到底思えません。
  それなのに、何故禁止されているのでしょう？
&lt;/p&gt;</description>
    <dc:date>2009-07-10T15:00:00Z</dc:date>
  </item>
  <item rdf:about="http://www.codelogy.org/quillpen/?entry=50">
    <title>32ビット環境で64ビット整数を扱う (減法編)</title>
    <link>http://www.codelogy.org/quillpen/?entry=50</link>
    <description>&lt;p&gt;
  &lt;a href=&quot;http://www.codelogy.org/quillpen/?entry=16&quot;&gt;32ビット環境で64ビット整数を扱う (加法編)&lt;/a&gt; の続き。&lt;br /&gt;
  今回は、加法のコードに少し手を加えて、減法を行う関数を作成します。
&lt;/p&gt;
&lt;p&gt;
  念のため、前回のエントリで使用した64ビット整数を表現するための構造体 QWORD の定義を再掲します。
&lt;/p&gt;
&lt;table class=&quot;code&quot;&gt;
&lt;tr&gt;
  &lt;td class=&quot;caption&quot;&gt;qword.h&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;pre&gt;&lt;em class=&quot;kwd&quot;&gt;#ifndef&lt;/em&gt; __QWORD_H__
&lt;em class=&quot;kwd&quot;&gt;#define&lt;/em&gt; __QWORD_H__

&lt;em class=&quot;cmt&quot;&gt;//32ビット整数&lt;/em&gt;
&lt;em class=&quot;kwd&quot;&gt;typedef&lt;/em&gt; &lt;em class=&quot;kwd&quot;&gt;unsigned&lt;/em&gt; &lt;em class=&quot;kwd&quot;&gt;long&lt;/em&gt; &lt;em class=&quot;usr&quot;&gt;DWORD&lt;/em&gt;;

&lt;em class=&quot;cmt&quot;&gt;//64ビット整数&lt;/em&gt;
&lt;em class=&quot;kwd&quot;&gt;typedef&lt;/em&gt; &lt;em class=&quot;kwd&quot;&gt;struct&lt;/em&gt; {
    &lt;em class=&quot;usr&quot;&gt;DWORD&lt;/em&gt; dwLow;  &lt;em class=&quot;cmt&quot;&gt;//下位32ビット&lt;/em&gt;
    &lt;em class=&quot;usr&quot;&gt;DWORD&lt;/em&gt; dwHigh; &lt;em class=&quot;cmt&quot;&gt;//上位32ビット&lt;/em&gt;
} QWORD;

&lt;em class=&quot;kwd&quot;&gt;#undef&lt;/em&gt; &lt;em class=&quot;cmt&quot;&gt;//__QWORD_H__&lt;/em&gt;
&lt;em class=&quot;cmt&quot;&gt;//[EOF]&lt;/em&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
</description>
    <dc:date>2009-04-20T11:00:00Z</dc:date>
  </item>
  <item rdf:about="http://www.codelogy.org/quillpen/?entry=47">
    <title>カウンタ付き参照</title>
    <link>http://www.codelogy.org/quillpen/?entry=47</link>
    <description>&lt;p&gt;
  C++ では、&lt;b&gt;new&lt;/b&gt; を用いてオブジェクト (メモリ領域) を確保したならば、これを &lt;b&gt;delete&lt;/b&gt; でを明示的に解放してやらなければなりません。
  この「借りたもの (メモリ) は自分で返す」という硬派なスタイルは非常に C++ らしく、またパフォーマンスの面でも優れるため、個人的にはとても気に入っています。
&lt;/p&gt;
&lt;p&gt;
  その一方で、このスタイルには&lt;a href=&quot;http://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%A2%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%AF&quot;&gt;メモリリーク&lt;/a&gt;や二重解放によるアクセス違反, ダングリング・ポインタの発生といった問題があり、致命的なバグの原因となりがちであることも事実です。
  また、プログラムの性質上、オブジェクトが利用されなくなるタイミングが予測しづらく、明示的な解放を記述することが原理的に困難であるような状況というものも存在します。
&lt;/p&gt;
&lt;p&gt;
  C/C++ 以外の殆どの言語は&lt;a href=&quot;http://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%99%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3&quot;&gt;ガーベジ・コレクション&lt;/a&gt;を言語仕様として採用することでこうした問題を回避しています。
  特に、ガーベジ・コレクション手法の一つである&lt;a href=&quot;http://ja.wikipedia.org/wiki/%E5%8F%82%E7%85%A7%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88&quot;&gt;参照カウント&lt;/a&gt;は、その動作原理が非常に単純であり、またそれ故に (一般的な状況下における) パフォーマンスにおいて他の手法よりも優れています。
  そこで、この参照カウントの仕組みを C++ でも利用できないかと考え、&lt;b&gt;Reference&lt;/b&gt; というクラステンプレートを作ってみました:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.nowhere.co.jp/~narita/library/narita/doc/ConstReference/&quot;&gt;汎用ライブラリ: ConstReference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.nowhere.co.jp/~narita/library/narita/doc/Reference/&quot;&gt;汎用ライブラリ: Reference&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
  ソースコードは上記リンク先のページからダウンロードすることができます。
&lt;/p&gt;
&lt;p&gt;
  今回はこの &lt;b&gt;Reference&lt;/b&gt; クラステンプレートの使い方について簡単に説明します。
&lt;/p&gt;
</description>
    <dc:date>2009-03-11T17:00:00Z</dc:date>
  </item>
  <item rdf:about="http://www.codelogy.org/quillpen/?entry=46">
    <title>C++ スタイルのキャスト</title>
    <link>http://www.codelogy.org/quillpen/?entry=46</link>
    <description>&lt;p&gt;
  C言語では、キャスト (型変換) を以下のような形式で行います。
&lt;/p&gt;
&lt;table class=&quot;code&quot;&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;pre&gt;( &lt;i&gt;type&lt;/i&gt; ) &lt;i&gt;expression&lt;/i&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;
  この記法では、どのような種類のキャストが行われるのかを明示したり、不正・危険なキャストに対してチェックを行うことができないという問題があります。&lt;br/&gt;
  そこで、C++ では &lt;b&gt;static_cast&lt;/b&gt;, &lt;b&gt;dynamic_cast&lt;/b&gt;, &lt;b&gt;const_cast&lt;/b&gt;, &lt;b&gt;reinterpret_cast&lt;/b&gt; の 4つのキャスト演算子が導入されました。&lt;br /&gt;
  今回は、これらのキャストの使い方について解説していこうと思います。
&lt;/p&gt;</description>
    <dc:date>2009-02-17T16:19:42Z</dc:date>
  </item>
</rdf:RDF>