2013-08-23 4 views
1

Я узнал, что Temporaries connot привязан к неконстантным ссылкам.VS2010: Временные пользователи не могут быть связаны с неконстантными ссылками

class X 
{ 
    int i; 
}; 

X fun() 
{ 
return X(); 
} 
void func(X &x) 
{ 

} 

int main() 
{ 

func(fun()); 
return 0; 
} 

Не звоните в fun производит временное? Зачем временно связываться с non-const reference здесь. Я не могу понять, почему этот компилирующий штраф.

EDIT: Я использую VS2010. Я не понимаю, как это должно быть.

+2

Из-за злого расширения MSVC. – chris

+0

Как я узнаю, что в этом дублирующем вопросе был ответ? –

+0

@UchiaItachi не имеет значения, знаете ли вы или нет, точка этого сайта не означает, что вы представите его, чтобы помочь вам и другим людям, если кто-то помечает ваш вопрос как обманутый _, который имеет ответ, который вам нужен, вы считаете сайт как сделавший свою работу – aaronman

ответ

2

Не звонит fun Производит временный?

Да.

Зачем временно связываться с неконстантной ссылкой здесь.

Не может.

Я не могу понять, почему этот компилирующий штраф.

Потому что ваш компилятор неисправен.

Я использую VS2010. Я не понимаю, как это должно быть.

Этот компилятор имеет много нестандартных «расширений» для языка. Это всего лишь один пример изворотливого кода, который принят этим компилятором, но не является совместимым.

+1

А, это сводило меня с ума! Благодарю. Возможно, я изменю заголовок вопроса с помощью 'VS2010' и' temporaries', чтобы он помогал другим. –