#include <iostream>
using namespace std;
int main()
{
// Case 1
cout << &5; // This line fails to compile. Ok, I get this because "5" is a rvalue.
// Case 2
const int& ref = 5;
cout << &ref; // Works fine. Why?
// Case 3
cout << &"SomeString"; // Works fine. Ok, I get this because "SomeString" is a lvalue
return 0;
}
Por que o caso 1 falha e o caso 2 passa? Não consegui encontrar explicação concreta em nenhum outro lugar. A maioria das respostas era confusa e autocontraditória.
Eu entendo que "5" em literal inteiro e é um rvalue (não podemos pegar o endereço dele). Então, o que de especial uma referência const lvalue no caso 2 faz, que permite pegar o endereço de "5"? Como eu li, uma referência (seja lvalue ou rvalue) é apenas um alias. Ela não tem endereço próprio.