#include <iostream>
int foo()
{
return 0;
}
int main()
{
const int& a = foo();
std::cout << &a << std::endl;
}
В этом коде a
привязывается к значению. Законно ли взять его адрес? (И под юридическим я подразумеваю: в коде плохо сформирован? Я вызываю неопределенное поведение?)
Это отлично. В C ++ 11 вы даже можете сделать это:
int&& a = foo();
a = 123;
Вы можете думать о временных временах, как это (концептуально и в целом):
x = func(); // translated as:
auto __temporary = func();
x = __temporary;
__destruct_value_now_and_not_later(__temporary);
Кроме если x
это определение ссылочного типа, компилятор отмечает, что вы целенаправленно ссылаетесь на временное значение, и продлевает срок его службы, удаляя код раннего уничтожения, делая его нормальной переменной.
Да. До переменной a
выходит за рамки видимости, временный снимок действителен. Херб Саттер может объяснить это лучше.