Aracılığıyla paylaş


Otomatik anahtar sözcüğü (Kesintinin türü)

Kendi başlatma ifadeden bildirilen bir değişken türü deduces.

auto declarator initializer;

Notlar

auto Anahtar sözcük türünü temizlemeniz bildirilen bir değişken başlatma ifade kullanmak için derleyici yönlendirir.

[!NOT]

Önce Visual C++ 2010, auto anahtar sözcüğü otomatik depolama sınıfı için belirleyici oldu.Kullanım artık bir hata olduğunu./Zc:auto Varsayılan derleyici seçeneği, derleyicinin yeni anlamı kullanmasını söyler auto anahtar sözcük.

Kullanmanızı öneririz auto çoğu durum için anahtar sözcük — dönüştürme gerçekten istemiyorsanız — çünkü şu faydaları sağlar:

  • Sağlamlık: deyim türü değişirse — bir işlevin dönüş türü değiştiğinde bu içerir — yalnızca çalışır.

  • Performans: dönüştürme olacaktır garanti.

  • Kullanılabilirlik: türü adı yazım zorlukları ve yazım hatalarını hakkında endişelenmeniz gerekmez.

  • Verimlilik: , kodlama daha etkili olabilir.

İçinde değil kullanmak istediğiniz dönüştürme çalışmaları auto:

  • Belirli bir tür ve başka bir şey istediğinizde bunu yapacaksınız.

  • İfade şablonu yardımcı türü — örneğin, (valarray+valarray) ve Başlatıcı Listeleri — nadiren yazmak seçecektir rağmen auto x = { 1 }; ve gerçekten almak beklediğiniz bir int.

Kullanmak için auto anahtar sözcüğü, bir tür bir değişken bildirmek için kullanın ve bir başlatma ifade belirtin.Değiştirebileceğiniz in addition, auto anahtar sözcüğünü kullanarak tanımlayıcıları ve Bildirimciler gibi const, volatile, işaretçi (*), başvuru (&) ve rvalue başvuru (&&).Derleyici başlatma ifade değerlendirilir ve olmadan değişken türü için bu bilgileri kullanır.

Atama (eşittir işareti sözdizimi) doğrudan bir başlatma (stil işlev sözdizimi) başlatma ifade olabilir veya bir Yeni işleç ifadesi.Veya başlatma ifade olabilir için aralık-bildirim parametresinde bir Range-based for Deyimi (C++) ifadesi.Daha fazla bilgi için bkz: Başlatıcı ve bu belgenin devamındaki kod örnekleri.

auto Anahtar sözcüðünü bir türü için bir yer tutucudur, ancak kendisini değil bir tür.Bu nedenle, auto anahtar sözcüğü kullanılamaz yayınları veya işleçleri gibi sizeof ve TypeId.

Kullanışlılığı

auto Anahtar sözcüğü, karmaşık bir türe sahip bir değişken bildirmek için basit bir yol.Örneğin, kullanabileceğiniz auto burada başlatma deyim içerir şablonlar, işaretçiler işlevlerine veya işaretçiler üyelerine bir değişken bildirmek için.

Ayrıca auto bildirmek ve lambda ifadesi bir değişkene başlatmak için.Lambda ifadesi türü yalnızca derleyicinin bilindiği için değişken türünü kendiniz bildiremezsiniz.Daha fazla bilgi için bkz. Lambda ifade örnekleri.

Kullanabileceğiniz auto, birlikte decltype Şablon Kütüphanesi yazma yardımcı olmak için belirleyici, yazın.Kullanım auto ve decltype şablon işlevi, return bildirmek için şablon değişkenlerinin türlerine bağlıdır.Veya, auto ve decltype başka bir işlev çağrısı sarar ve sonra ne olursa olsun bu işlevin dönüş türü verir bir şablonu işlev bildirmek için.Daha fazla bilgi için bkz. decltype türü belirticisi.

Kısıtlamalar ve hata iletileri

Kullanımı ile ilgili kısıtlamalar aşağıdaki tabloda listelenmiştir auto anahtar sözcüğünü ve derleyicinin ürettiði karşılık gelen tanılama hata iletisi.

Hata numarası

Tanımlama

C3530

auto Anahtar sözcüğünü herhangi bir diğer tür-belirleyici ile ilişkilendirilemez.

C3531

Bir sembolü ile bildirilen auto anahtar sözcüğünü bir başlatıcı olması gerekir.

C3532

Yanlış kullanılan, auto bir bildirmek için anahtar sözcüğü.Örneğin, bir yöntemin dönüş türü veya bir dizi bildirilir.

C3533, C3539

Bir parametre veya şablon bağımsız değişkeni ile bildirilemez auto anahtar sözcük.

C3534

İle bildirilen bir sembol auto anahtar sözcük bulunan bir new deyim bir başlatıcı olması gerekir.Daha fazla bilgi için bkz. operator new (<new>).

C3535

Bir yöntem veya şablon parametresi ile bildirilemez auto anahtar sözcük.

C3536

Bir sembolü yeniden başlatılmadan önce kullanılamaz.Uygulamada, bir değişkenin kendisini başlatmak için kullanılamaz anlamına gelir.

C3537

İle bildirilen bir türe atanamaz auto anahtar sözcük.

C3538

Tüm simgeleri ile bildirilen Bildiricisi listesinde auto anahtar sözcük için aynı tür çözmek gerekir.Daha fazla bilgi için bkz. Bildirimleri.

C3540, C3541

Sizeof ve TypeId işleçleri ile bildirilen bir sembole uygulanamaz auto anahtar sözcük.

Örnekler

Bu kod parçaları hangi yollardan bazılarını gösteren auto anahtar sözcüğü kullanılabilir.

Aşağıdaki bildirim eşdeğerdir.İlk ifadesinde, değişken j türü olarak bildirilen int.İkinci ifade, değişken, k türü deduced int başlatma ifadesi (0) bir tamsayı olduğundan.

   int j = 0;  // Variable j is explicitly type int.
   auto k = 0; // Variable k is implicitly type int because 0 is an integer.

Aşağıdaki bildirim eşdeğerdir, ancak ikinci bildirim ilk basittir.Kullanmak için en ilgi çekici nedenlerinden biri auto kolaylık bir anahtardır.

   map<int,list<string>>::iterator i = m.begin(); 
   auto i = m.begin(); 

Aşağıdaki kod parçası türü değişkenleri bildirir iter ve elem , for ve aralık for döngüsü Başlat.

// cl /EHsc /nologo /W4
#include <deque>
using namespace std;

int main()
{
    deque<double> dqDoubleData(10, 0.1);

    for (auto iter = dqDoubleData.begin(); iter != dqDoubleData.end(); ++iter)
    { /* ... */ }

    // prefer range-for loops with the following information in mind
    // (this applies to any range-for with auto, not just deque)

    for (auto elem : dqDoubleData) // COPIES elements, not much better than the previous examples
    { /* ... */ }

    for (auto& elem : dqDoubleData) // observes and/or modifies elements IN-PLACE
    { /* ... */ }

    for (const auto& elem : dqDoubleData) // observes elements IN-PLACE
    { /* ... */ }
}

Aşağıdaki kod parçası kullanır new işaretçiler bildirmek için işleç ve işaretçi bildirimi.

   double x = 12.34;
   auto *y = new auto(x), **z = new auto(&x);

Sonraki kod parçası her declaration deyimi içinde birden çok simge bildirir.Tüm simgeler her deyiminde aynı türe çözmek dikkat edin.

   auto x = 1, *y = &x, **z = &y; // Resolves to int.
   auto a(2.01), *b (&a);         // Resolves to double.
   auto c = 'a', *d(&c);          // Resolves to char.
   auto m = 1, &n = m;            // Resolves to int.

Koşul operatörü Bu kod parçasını kullanır (?:) değişkeni bildirmek için x 200 değeri bir tamsayı olarak:

   int v1 = 100, v2 = 200;
   auto x = v1 > v2 ? v1 : v2;

Aşağıdaki kod parçası değişkenini x yazmak için int, değişken y yazmak için bir başvuru için constintve değişken fp tür döndüren bir işlev işaretçisi int.

int f(int x) { return x; }
int main()
{
    auto x = f(0);
    const auto & y = f(1);
    int (*p)(int x);
    p = f;
    auto fp = p;
    //...
}

Ayrıca bkz.

Başvuru

Otomatik anahtar sözcük

Depolama sınıfı belirteçleri

C++ anahtar sözcükler

/Zc:Auto (değişken türü ortaya çýkarmak)

sizeof operatörü

TypeId

operator new (<new>)

Bildirimleri

Lambda ifade örnekleri

Başlatıcı

decltype türü belirticisi