Estaba navegando a través de la draft of the C++11 standard y encontró la siguiente declaración desconcertante (§13.6/8):Unario + sobre los punteros de
Para cada tipo
T
existen funciones de operador candidatos de la formaT* operator+(T*);
¿Cómo debe entenderse este operador "unario +" en el puntero? ¿Es esto simplemente una ausencia operativa en el caso normal, que sin embargo puede estar sobrecargada? ¿O hay algún punto más profundo que me falta aquí?
Entonces 'T * operator + (T *);' ¿es miembro o global? y en el caso de lambda -> '+ [] {};' ¿qué es 'T', me pregunto? Gracias –
@ AngelusMortis: los punteros no pueden tener miembros; esto usa el 'operador +' unario incorporado del lenguaje para tipos aritméticos.Y el tipo de '+ [] {}' es 'void (*)()', como unario 'operator +' en lambdas sin captura convierte el lambda en un puntero de función. – ildjarn
Estimado señor, todavía estoy un poco confundido, así que déjame preguntar citando tus declaraciones -> "Los punteros no pueden tener miembros" sí, pero inicialmente pensé que las lambdas se convierten a clases (por compiladores) sobrecargando 'operator()', por lo tanto Pensé que podrían ser miembros. Ahora su afirmación "usa el operador unario' incorporado del lenguaje + 'para tipos aritméticos", estoy seguro de que los tipos aritméticos son básicamente tipos integrales + flotantes, y cómo la expresión -> '+ []()' -> 'operador + (algunos_nombre_no_no_I_don 't_know) '-> se convierte en' void (*)() ' –