Sono sconcertato da questo:Perché il binding al riferimento const da un ternario crea una copia?
#include <iostream>
struct X {};
void f(const X &x) { std::cerr << &x << "\n"; }
static X x;
int main()
{
f(x); // Off stack address
f(false ? X() : x); // Different address on stack.
}
Perché sarebbe la seconda invocazione di f fare una copia temporanea?
Modifica: Questa domanda non riguarda tanto il tipo X, quanto il fatto che ne viene fatta una copia. Mi mancava la sottolocazione delle categorie di valori dalla risposta accettata e mi ero aspettato che il parametro di f si legasse su x o X() direttamente come quando riformulava questa come un'istruzione if.
Vedere http://stackoverflow.com/questions/8535226/return-type-of-ternary-conditional-operator –
Vedere: http://stackoverflow.com/questions/8535226/return-type-of-ternary- operatore condizionale – Owbea
La domanda collegata riguardava il fatto di avere tipi diversi su entrambi i lati del colon. Mentre le risposte discutono le categorie di valore, non spiegherebbero direttamente perché la costruzione della copia è necessaria nella domanda che ho chiesto. Ho modificato la mia domanda per chiarirlo. – bking