Middle
Mit használ a decltype kulcsszó a C++-ban?
sobes.tech MI
Válasz az MI-től
A decltype az kifejezés típusának meghatározására szolgál.
Fő felhasználási esetek:
-
A függvény visszatérési típusának meghatározása a paraméterlistát követően ( trailing return type ):
template<typename T, typename U> auto add(T t, U u) -> decltype(t + u) { return t + u; }Ez lehetővé teszi a visszatérési típus meghatározását egy olyan kifejezés alapján, amely magában foglalja a függvény paramétereit.
-
Egy változó típusának meghatározása:
int x = 10; decltype(x) y; // y típusa int -
Egy kifejezés típusának meghatározása (nem feltétlenül változó):
const int ci = 0; decltype(ci) z; // z típusa const int struct S { double d; }; S s; decltype(s.d) val; // val típusa double int arr[5]; decltype(arr[0]) elem; // elem típusa int int& ref_int(); decltype(ref_int()) r = ref_int(); // r típusa int& -
Metaprogramozásban sablonokkal: Lehetővé teszi típusok meghatározását sablonstruktúrákban.
-
Kapcsolat az kifejezéskategóriákkal (lvalue/rvalue):
- Ha a kifejezés lvalue, akkor
decltype(expr)aT&típust adja vissza aTtípushoz. - Ha a kifejezés rvalue, akkor
decltype(expr)aTtípust adja vissza aTtípushoz. - Kivétel: ha a kifejezés zárójelek között van, és egy változó vagy osztálytag neve, akkor a
decltypea deklarált típusát (T) adja vissza, függetlenül attól, hogy lvalue vagy sem.
int i = 0; decltype(i) t1; // int (változó neve) decltype((i)) t2; // int& (zárójelek közötti lvalue kifejezés) int&& rv_ref = 5; decltype(rv_ref) t3; // int&& (rvalue referencia típusú változó neve) decltype((rv_ref)) t4; // int&& (rvalue referencia típusú kifejezés zárójelek között) - Ha a kifejezés lvalue, akkor
decltype kiszámítja egy kifejezés típusát fordítási időben, anélkül, hogy értékelné azt.