tipos - En C++ 11, ¿cómo puedo obtener un valor temporal sin un nombre?
tipos de datos en c++ (3)
Escriba una plantilla de función para convertir valores en valores l:
template<typename T>
T &as_lvalue(T &&val) {
return val;
}
Ahora, úsalo:
deref(&as_lvalue(42));
Advertencia: esto no prolonga la vida útil del temporal, por lo que no debe usar la referencia devuelta después del final de la expresión completa en la que se creó el temporal.
Tengo un C lib tradicional y una función ( setsockopts
) quiere un argumento por puntero. En C ++ 11 (gcc 4.8), ¿puedo pasar este argumento sin inicializar una variable nombrada?
Tengo la siguiente solución no satisfactoria:
#include <iostream>
#include <memory>
int deref(int const * p) {return * p;}
using namespace std;
int main() {
int arg = 0; cout << deref(& arg) << endl;
// works, but is ugly (unnecessary identifier)
cout << deref(& 42) << endl;
// error: lvalue required as unary ‘&’ operand
cout << deref(& * unique_ptr<int>(new int(42))) << endl;
// works, but looks ugly and allocates on heap
}
Puede enlazar una referencia const
a un temporal:
cout << deref(addressof<const int>(42)) << endl;
Simplemente crearía un envoltorio para setsockopt
si eso es realmente un problema (no probado)
template <typename T>
int setsockopt(int socket, int level, int optname, const T& value) {
return setsockopt(socket, level, optname, &value, sizeof(value));
}
...
setsockopt(socket, IPPROTO_TCP, TCP_NODELAY, 1);