Я написал следующий код, чтобы проверить это:Можно ли привязать временные ссылки к неконстантным ссылкам?
struct X
{
char* x;
X()
{
x = new char('a');
}
~X()
{
*x = 'b';
delete x;
}
};
void foo(const X& x)
{
}
void goo(X& x)
{
}
int main()
{
foo(X());
goo(X());
}
деструкторов для временных называется после как функции выхода, но я думал, что вы можете связывать только временный к const
ссылке. Почему тогда работает goo
?
Неправильно ли это UB и MSVS, или все в порядке?
«Это UB и MSVS ошибочно» - если UB MSVS * не может быть ошибочным по определению, потому что проявления UB включают «все работает как ожидалось» (для каждого значения «как ожидалось»). –
Это обман по другому вопросу. И да, MSVC здесь непослушный, проверьте идеон: http://ideone.com/zykx9. – Pubby
Возможный дубликат [Как ссылка не-const ссылается на временный объект?] (Http://stackoverflow.com/questions/1565600/how-come-a-non-const-reference-cannot-bind-to -a-time-object) – iammilind