c++11 decltype nedir? decltype(auto) nedir?

İlk gördüğümden bende şaşırmıştım. Nedir bu decltype yada decltype(auto)? c++11 ile gelen bir özellik. Temel olarak değişkenin tipini  belirlemeye yarıyor fakat auto gibi değil. auto kelimesi oldukça sınırlıdır. python "type(değişken)" ifadesi gibi çalışıyor.
Örnek;
//böyle bir ifademiz varsa.
int var;
const int&& fx();
struct A { double x; }
const A* a = new A();

decltype(fx()) -> const int&& tipinde
decltype(a->x) -> double
decltype((a->x)) -> const double & türünde olacaktır.

fonksiyonlardaki kullanımı ise dönüş tipini otomatik belirlemededir.
c++11 dönüş tipini belirtmeniz gerekirken c++14 ile dönüş tipini otomatik bulması sağlanır yani auto ile.
decltype(auto) oldukça garip duruyor bence. c++17 ve c++20 ile umarım bu ifade de gidip sadece auto yaparız umarım fakat c++17 ile parallel işlemleri, c++20 ile 2d grafik işlemlerini standartlaştırmayı planlıyorlar. c++ geri kalmış bir dil değildir.

//C++11
 template<typename T, typename U>
 auto myFunc(T&& t, U&& u) -> decltype (forward<T>(t) + forward<U>(u)) {
  return forward<T>(t) + forward<U>(u);
}
//C++14
 template<typename T, typename U>
 decltype(auto) myFunc(T&& t, U&& u) {

  return forward<T>(t) + forward<U>(u);
}

Biraz daha modern dillere benzemeye başladı sanki nedersiniz?

Yorumlar

Popüler Yayınlar