2016-12-10 10 views
4

Я полагаю, что статический член данных класса может быть ссылочный тип инициализации глобальной переменной, как это:Проблемы с ссылочного типа Static данные пользователя, может быть ошибка компилятора

#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» на подписанный int. Итак, это похоже на ошибку, но я хочу удвоить подтверждение. – JavaMan

+0

Это похоже на ошибку. Связывая 'unsigned int' с' signed int const & ', должен быть создан временный' unsigned int', а его срок службы расширен до целевой ссылочной переменной ('K :: iref'). Это почти похоже на то, что MSVC не выполняет это продление на всю жизнь. – dyp

ответ

0

Вам просто нужно шанс

сопзЬ ИНТ & к :: Iref

к

к :: Iref

И вы должны инициализировать переменная, когда вы декларируете, а не из его объем.

 Смежные вопросы

  • Нет связанных вопросов^_^