Ne kadar C 11 otomobil ile çok fazla anahtar kelime.
İçin tasarlanmış olduğuna inanıyorum budur auto
karmaşık şablon türleri için C 11 standart mevcut yeni anahtar kelime kullanıyorum. Ama aynı zamanda gibi şeyler için kullanıyorum:
auto foo = std::make_shared<Foo>();
Ve daha skeptically için:
auto foo = bla(); // where bla() return a shared_ptr<Foo>
Bu konu hakkında çok tartışma görmedim. Otomatik bir türü sıklıkla belgeleri ve sağlamlık denetimleri bir form olduğu için gereksiz olabilir gibi görünüyor. Nerede auto
kullanarak çizgi çiz ve ne kullanımı tavsiye edilen bu yeni özellik için dava var mı?
Netleştirmek için: felsefi bir görüş için soruyorum; standart Komitesi tarafından bu anahtar kelime kullanım için soruyorum, muhtemelen bu kullanım pratikte hayata nasıl yorum.
Yan Not: Bu soru SE taşındı.Programcılar ve geri Yığın Taşması. Bu konuda tartışma meta question Bu bulunabilir.
CEVAP
Bir ilk bakışta zor türü nasıl yazıldığını söylemek ne zaman auto
anahtar kelime kullanmak gerektiğini düşünüyorum, ama ifadenin sağ tarafı türüne açıktır. Örneğin, kullanarak:
my_multi_type::nth_index<2>::type::key_type::composite_key_type::\
key_extractor_tuple::tail_type::head_type::result_type
bunu bildiğin halde boost::multi_index
, bileşik anahtar türü için int
. Sadece gelecekte değişmiş olabilir çünkü int
yazamazsın. Bu durumda auto
yazarım.
Eğer auto
anahtar kelime, belirli bir durumda okunabilirliği arttırır eğer öyleyse bunu kullanın. auto
neyi temsil ettiğini okuyucuya açıktır auto
yazabilirsiniz.
İşte bazı örnekler:
auto foo = std::make_shared<Foo>(); // obvious
auto foo = bla(); // unclear. don't know which type `foo` has
const size_t max_size = 100;
for ( auto x = max_size; x > 0; --x ) // unclear. could lead to the errors
// since max_size is unsigned
std::vector<some_class> v;
for ( auto it = v.begin(); it != v.end(); it ) // ok, since I know
// that `it` has an iterator type (don't really care which one in this context)
Birden fazla sınıflar arasında nasıl k...
'açmak için çok fazla değer'...
Sanal anahtar kelime Varlık Çerçevesi ...
Unıx sıralama ile sıralama birden fazl...
Neden verim sıradan bir IEnumerable ku...