デジタルちんぶろぐ

デジタルな話題

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  268  : 記事  0  : コメント  4419  : トラックバック  79

ニュース


技術以外は
ちんぶろぐ

記事カテゴリ

書庫

日記カテゴリ

※便宜上構造体(struct)もクラスと書いています
※使用したコンパイラはVC9/gcc4.3.2です

クラス内にconst変数があり、クラス内でのテンプレートクラス宣言の引数で同じ名前を使ったプログラムをVCとgccでコンパイル・実行した場合に挙動が変わります。

#include <iostream>
using namespace std;

struct test
{
    const static int value = 1;

    template<int value> struct inner1 {
        const static int inner_value = value;
        int get_value() { return value; }
    };
};

int main()
{
    test::inner1<2> t1;

    cout << t1.inner_value << endl;
    cout << t1.get_value() << endl;
}

VCでの実行結果は
2
2

gccの実行結果は
2
1

VCの場合inner1の中でのvalueは常にテンプレート引数のvalueが使用されていますが、gccの場合静的変数の初期値valueはテンプレート引数が使われているのにクラス内メソッドget_valueの戻り値のvalueで外側のクラスtestの静的変数が使われています。

どちらの挙動が正しいのかは知りませんが、僕はVCの方が正しいような気がしています。

投稿日時 : 2009年6月8日 0:43

コメント

# re: [C++] VCとgccで定数名とtemplate引数の名前を同じにした場合の挙動の違い 2009/06/08 11:37 T.Hirase
あらぁ。。スコープが狭いほうを優先してほしいですよね。
明示的に指定したいですけど、test::valueはできても、inner1::value?はできないですよねぇ・・・・。



# re: [C++] VCとgccで定数名とtemplate引数の名前を同じにした場合の挙動の違い 2009/06/08 17:55 あんどちん
>> T.Hiraseさん
> あらぁ。。スコープが狭いほうを優先してほしいですよね。
ですね。それでちょっと混乱してしまいました。

> 明示的に指定したいですけど、test::valueはできても、inner1::value?はできないですよねぇ・・・・。
テンプレートパラメータですもんね。
return inner_value;と書けば2を返してくれますけど。

もっとも変数名やパラメータ名を使いまわすような可読性を下げるコーディングは通常しないでしょうからこれも実害が低い問題ですね。
# ボキャブラリの問題で同じ名前を使い回してしまうので発見した訳ですが^^;

# re: [C++] VCとgccで定数名とtemplate引数の名前を同じにした場合の挙動の違い 2016/04/26 11:29 sdf
vhttp://www.oakleysunglassesa.us.com/
http://www.oakley-sunglass.us.com/
http://www.oakleysunglasses.qc.com/
http://www.rayban-sunglasses.net.co/
http://www.raybansunglasses.qc.com/
http://www.ray-banoutlet.name/
http://www.polo--ralphlauren.net/
http://www.ralphlauren-outlet.in.net/
http://www.burberryoutletonline.org/
http://www.burberry-outletsale.us.com/
http://www.toms-shoes.us.org/
http://www.tomsoutlet.com.co/
http://www.michaelkorsoutletonlinestoresale.us.com/
http://www.michaelkors-outlet-online.net/
http://www.christian--louboutin.net/
http://www.tory--burch.org/
http://www.toryburch-outlet.net/
http://www.gucci--outlet.org/
http://www.guccioutletsale.in.net/
http://www.cheap-jordan-shoes.net/
http://www.air-jordan.in.net/
http://www.cheap-jordans.in.net/
http://www.jordansretro.in.net/
http://www.nikeshoesinc.net/
http://www.nike-shoes.in.net/
http://www.air-max-2015.net/
http://www.airmax-90.in.net/
http://www.airmax-95.in.net/
http://www.nike-free-run.net/
http://www.nikefree-5.com/
http://www.chanel--handbags.net/
http://www.chanelbags-outlet.us/
http://www.true-religion.cc/
http://www.north-faceoutlet.in.net/
http://www.coach-outlet-store.in.net/


Post Feedback

タイトル
名前
Url:
コメント: