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?
Ö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
Yorum Gönder