Законно ли взять адрес ссылки на постоянное значение?

#include <iostream>
int foo()
{
return 0;
}

int main()
{
const int& a = foo();
std::cout << &a << std::endl;
}

В этом коде a привязывается к значению. Законно ли взять его адрес? (И под юридическим я подразумеваю: в коде плохо сформирован? Я вызываю неопределенное поведение?)

4

Решение

Это отлично. В C ++ 11 вы даже можете сделать это:

int&& a = foo();
a = 123;

Вы можете думать о временных временах, как это (концептуально и в целом):

x = func(); // translated as:

auto __temporary = func();
x = __temporary;
__destruct_value_now_and_not_later(__temporary);

Кроме если x это определение ссылочного типа, компилятор отмечает, что вы целенаправленно ссылаетесь на временное значение, и продлевает срок его службы, удаляя код раннего уничтожения, делая его нормальной переменной.

5

Другие решения

Да. До переменной a выходит за рамки видимости, временный снимок действителен. Херб Саттер может объяснить это лучше.

2

По вопросам рекламы [email protected]