2014-10-24 13 views
5

C++ Guru Herb Sutter proponuje, że powinniśmy prawie zawsze używać "auto". Mówi to na swoim website i ostatnio powtórzył to na CppCon 2014 conference."Zawsze używaj Auto" w C++ 11?

Starałem się postępować zgodnie z jego radami i nie jestem przekonany. Czy jest tu ktoś, kto zgadza się z Sutter i kto może mi powiedzieć dlaczego

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

jest lepsza niż

string gender, number, person; 

co jest, co skończyło się na piśmie w moim kodu, bo nie mógł znieść auto styl.

Edit:

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

również możliwość, ale moim zdaniem to jest jeszcze gorzej.

+7

Zrób sobie i wszystkim innym przysługę i używaj std :: string zamiast ciągów. – gnasher729

+4

Deklarowanie wielu zmiennych w jednym wierszu jest zwykle również mile widziane. – gnasher729

+0

Gdy zaczniesz pracować tylko z szablonami, sensowne będzie używanie auto (prawie wyłącznie). – Shaggi

Odpowiedz

1

auto kluczowe powinny być wykorzystywane głównie w przypadkach, gdzie można zainicjować zmienną o wartości, a to sprawia, że ​​kod bardziej utrzymaniu w przypadkach, w których zmiany wartości zainicjować zmienną:

uint16_t id_ = 65535; 

uint16_t id() 
{ 
    return id_; 
} 

auto myid = id(); 

Nie należy zmienić typ myid, jeśli zmiany typu zwracanego są id().

A z C++ 14 robi się jeszcze lepiej:

uint16_t id_ = 65535; 

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

auto myid = id(); 

Zmiana typu id_ automatycznie dostosowuje typ zwracanej id() i rodzaj myid.

W przypadkach, w których początkowa wartość zmiennej nie została zainicjalizowana wartością i jako taka nie jest zależna od innego kodu do inicjalizacji, sensowne jest jawne zdefiniowanie typu zmiennej, ponieważ automatyczne słowo kluczowe nie zwiększyłoby łatwości konserwacji do kodu i składnia auto gender = string{}; jest mniej czytelna niż string gender;.

+3

Masz rację w tym przypadku. Ale pytanie dotyczy przypadku, w którym istnieje prosta konstrukcja obiektu z domyślnym konstruktorem. Nie mam żadnych problemów z auto w sytuacji, o której wspomniałeś, ale wydaje mi się, że 'type variable' jest prostsza i bardziej czytelna niż' auto variable = type {} '. – oz1cz

+0

Ach, prawda, założyłem, że to było bardziej ogólne pytanie. Twój przypadek jest przykładem tego, dlaczego mówi "prawie zawsze". Jeśli tworzysz obiekty w lokalnym zakresie funkcji, ma to również sens, że wiesz, jaki jest typ i jako taki powinien zadeklarować zmienną tego typu. 'auto' powinno być użyte dla zmiennych, gdzie otrzymasz wartość z innego miejsca i możesz ją zainicjować z tej wartości (ponieważ dzięki temu kod staje się łatwiejszy w utrzymaniu, tak jak pokazałem w mojej odpowiedzi). – heksesang

+0

Zaktualizowano odpowiedź, aby lepiej odpowiedzieć na pytanie. – heksesang