10 Haziran 2019 Pazartesi

auto değişken ve Array

Giriş
Normalde auto asla referans değildir.

Örnek
Şöyle yaparız.
int& foo() {
    static int x = 42;
    return x;
}

auto x = foo(); // Type of `x` is `int`, not `int&`.
Ancak dönüş tipi array ise sorun çıkar çünkü auto değişken pointer olarak algılanır. Bundan kurtulmak için auto& veya auto&& şeklinde kullanılır.

Örnek
AllFormats() array dönen bir metod olsun. Şöyle yaparız
auto&          array1 = AllFormats(); // 1.
auto&&         array1 = AllFormats(); // 2.
decltype(auto) array1 = AllFormats(); // 3.
Açıklaması şöyle.
1. Declares explicitly an lvalue reference.
2. Declares a universal reference, which collapses into an lvalue reference, because AllFormats returns an lvalue reference. It would be an rvalue reference if AllFormats returned Format&&.
3. auto type deduction uses different rules from decltype deduction. One key difference is that auto is never a reference, while decltype(E); may be a reference, depending on the expression E. decltype(auto) var = E allows a declaration using the decltype rules as if decltype(E) was used.

Hiç yorum yok:

Yorum Gönder