2016-12-10 21 views
4

可能性があり、私はクラスの静的データメンバは、このようなグローバル変数を初期化し、参照タイプにすることができたとします問題、コンパイラのバグ

#include <iostream> 
#include <stdio.h> 

const unsigned int global =0x1fee; 
struct K { 
    int a; 
    static const int & iref; 
}; 
const int & K::iref=global; 
int main() 
{ 
    printf("%d\n",K::iref); 
    return 0; 

} 

しかし、私のVC++ testで、コンパイルできますが、実行時に例外が生成されます。 VC++のバグですか?私は何か悪いことをしましたか?

+1

意図的に 'unsigned int 'を' signed int& 'にバインドしようとしていますか? – dyp

+0

いいえ、問題のテスト用です。 'global'をsigned intに変更しても問題ありません。だから、バグのように見えますが、私はダブル確認したいです – JavaMan

+0

本当にバグのようです。 'unsigned int 'を' signed int const& 'に束縛することで、一時的な' unsigned int'が作成され、その存続期間が目的の参照変数( 'K :: iref')まで拡張されます。 MSVCはその寿命延長を実行しないようです。 – dyp

答えて

0

あなただけ

のconstは

kに& K ::

IREFをint型::

IREFチャンスを必要としますが、初期化する必要がありますあなたが宣言したときの変数。その範囲。

関連する問題