decltype specifier
Da cppreference.com.
![]() | Questa pagina è stata tradotta in modo automatico dalla versione in ineglese della wiki usando Google Translate. La traduzione potrebbe contenere errori e termini strani. Muovi il puntatore sopra al testo per vedere la versione originale. Puoi aiutarci a correggere gli gli errori. Per ulteriori istruzioni clicca qui. |
Ispeziona il tipo dichiarato di un'entità o interroga il tipo restituito di un'espressione.
Original:
Inspects the declared type of an entity or queries the return type of an expression.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Indice |
[modifica]Sintassi
decltype ( entity) | (1) | (dal C++11) | |||||||
decltype ( expression) | (2) | (dal C++11) | |||||||
[modifica]Spiegazione
1)
Se l'argomento è il nome unparenthesised di un oggetto / funzione, o è un'espressione accesso ai membri (o
object.member
pointer->member
), allora il decltype specifica il tipo dichiarato della entity specificato con questa espressione.Original:
If the argument is either the unparenthesised name of an object/function, or is a member access expression (
object.member
or pointer->member
), then the decltype specifies the declared type of the entity specified by this expression.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
2)
Se l'argomento è qualsiasi altra espressione di
T
tipo, alloraOriginal:
If the argument is any other expression of type
T
, thenThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
a)
se il valore della categoria di expression è xValue', poi la decltype specifica
T&&
Original:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
b)
se il valore di categoria expression è lvalue', poi la decltype specifica
T&
Original:
if the value category of expression is lvalue, then the decltype specifies
T&
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
c)
in caso contrario, decltype specifica
T
Original:
otherwise, decltype specifies
T
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Si noti che se il nome di un oggetto è tra parentesi tonde, diventa espressione lvalue, così decltype(arg) e decltype((arg)) sono spesso diversi tipi.
Original:
Note that if the name of an object is parenthesised, it becomes an lvalue expression, thus decltype(arg) and decltype((arg)) are often different types.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
decltype
è utile quando si dichiara tipi che sono difficili o impossibili da dichiarare usando la notazione standard, come lambda relativi tipi o tipi che dipendono da parametri di modello.Original:
decltype
is useful when declaring types that are difficult or impossible to declare using standard notation, like lambda-related types or types that depend on template parameters.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
[modifica]Parole chiave
[modifica]Esempio
#include <iostream> struct A {double x;};const A* a = new A(); decltype( a->x ) x3;// type of x3 is double (declared type) decltype((a->x)) x4 = x3;// type of x4 is const double& (lvalue expression) template<class T, class U>auto add(T t, U u)-> decltype(t + u);// return type depends on template parameters int main(){int i =33; decltype(i) j = i*2; std::cout<<"i = "<< i <<", "<<"j = "<< j <<'\n'; auto f =[](int a, int b)->int{return a*b;}; decltype(f) f2{f};// the type of a lambda function is unique and unnamed i = f(2, 2); j = f2(3, 3); std::cout<<"i = "<< i <<", "<<"j = "<< j <<'\n';}
Output:
i = 33, j = 66 i = 4, j = 9
[modifica]Vedi anche
(C++11) | ottiene il tipo di espressione in un contesto non valutata Original: obtains the type of expression in unevaluated context The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (funzione di modello) |