2014-10-24 32 views
5

C++ guru Herb Sutter, hemen her zaman "auto" kullanmamız gerektiğini önermektedir. Bunu website numaralı telefondan bildiriyor ve kısa bir süre önce CppCon 2014 conference numaralı telefondan tekrarladı.C++ 11'de "Daima Otomatik Kullan" mı?

Onun tavsiyelerini takip etmeye çalıştım ve ikna olmadım. Sutter katılıyor ve

auto gender = string{}; 
auto number = string{}; 
auto person = string{}; 

daha iyi

string gender, number, person; 

neden kim ben otomatik dayanamam çünkü benim kod yazma sona erdi budur bana söyleyebilir biri var mı tarzı.

Düzenleme:

auto gender = string{}, number = string{}, person = string{}; 

da bir ihtimal, ama bence bu daha bile kötü. oto anahtar kelime ağırlıklı bir değerle değişkeni başlatmak durumlarda kullanılması gerektiğini

+7

Kendinize ve başkalarına bir iyilik yapın ve string yerine std :: string kullanın. – gnasher729

+4

Bir satırda birden çok değişken bildirilmesi genellikle aynı zamanda kaşları çatılır. – gnasher729

+0

Yalnızca şablonlu türlerle çalışmaya başladığınızda, otomatik (neredeyse tamamen) kullanmak mantıklı olacaktır. – Shaggi

cevap

1

bu kod daha sürdürülebilir sen ile değişkeni başlatmak değerini değiştirmek durumlarda yapar gibi: Hayır

uint16_t id_ = 65535; 

uint16_t id() 
{ 
    return id_; 
} 

auto myid = id(); 

id() dönüş türü değişiklikleri varsa, myid türünü değiştirmeniz gerekir.

Ve C++ 14 ile daha da iyi olur:

uint16_t id_ = 65535; 

decltype(auto) id() 
{ 
    return id_; 
} 

auto myid = id(); 

otomatik id() dönüş türünü ve myid türünü ayarlar id_ tipini değiştirme.

Değişkenin başlangıç ​​değerinin bir değerle başlatılmadığı ve başlatma için başka bir koda bağlı olmadığı durumlarda, otomatik anahtar kelime daha fazla bakım gerektirmeyeceğinden, değişken türünü açıkça tanımlamak mantıklıdır. kod ve auto gender = string{}; sözdizimi string gender;'dan daha az okunabilir.

+3

Bu durumda haklısınız. Ancak soru, varsayılan bir kurucu olan bir nesnenin basit bir yapısının olduğu bir durum ile ilgilidir. Burada bahsettiğiniz durumda otomatik olarak hiçbir problemim yok, ama 'type değişkeninin' auto variable = type {} 'den daha basit ve okunabilir olduğunu hissediyorum. – oz1cz

+0

Ah, doğru, daha genel bir soru olduğunu varsaydım. Sizin davanız neden "hemen hemen her zaman" dediğine dair bir örnektir. Nesnelerinizi yerel bir işlev kapsamında oluşturursanız, türün ne olduğunu ve bu tür bir değişkeni bildirmesi gerektiğini de bilmeniz gerekir. 'auto', değeri başka bir yerden aldığınız ve onu bu değerden başlatabileceğiniz değişkenler için kullanılmalıdır (çünkü bu, kodu cevabımda daha fazla korunabilir hale getirir, çünkü cevabımda eklediğim gibi). – heksesang

+0

Gerçek soruya daha iyi cevap vermek için cevabı güncelledi. – heksesang