2008-10-31 29 views
6

有沒有人見過在c/C++中顯式使用的存儲類auto?如果是這樣,在什麼情況下?auto c/C++

回答

23

auto在當前的C/C++中永遠不會有用,因爲所有變量都是隱式自動的。它在C++ 0x中非常有用,它可以完全替換類型聲明 - 如果你有一個帶有初始賦值的變量,'auto'就會使它成爲賦值的類型,就像註釋中那樣。

+0

你能包括的C++ 0x的例子使用? – c0m4 2008-10-31 05:35:14

+2

auto funcptr = std :: tr1 :: bind(&Foo :: Bar,this,_1,_2);這聲明「funcptr」與「bind」返回的類型相同(這是一個非常複雜的類型;在過去,你會將它包裝在std :: tr1 :: function模板中,但是使用auto不再需要這樣做了)。 – 2008-10-31 05:39:33

+0

這是一個特殊情況,還是一般工作更多,如 auto someVar = functionThatReturnsUnknownType(); ? – c0m4 2008-10-31 05:51:32

1

不,假定您是否省略類說明符。我能想到的唯一合理用途是喚起對注意某個特定的局部變量的重要性,比如說一個具有相同名稱的全局變量,或者作爲一個面試問題。

很可能你會迷惑那些堅持維護代碼的可憐程序員!

4

我還沒有看到auto用於過去10多年中編寫的代碼。沒有理由使用auto,因爲只有您可以使用的地方無論如何都是暗含的。它仍然存在的唯一原因是爲了向後兼容,但應該在新代碼中避免它。

1

正如亞歷已覆蓋,自動被C++ 0x中用於聲明在初始化聲明類型,其中類型是從初始化代碼推斷。

有人建議將它也用作返回類型,其中類型是從返回值的代碼中推導出來的。然而,這引起了一種模棱兩可的情況,因此在編寫本文時,正在考慮與C++ 0x的lambda語法更加一致的東西。

2

這裏是從我的代碼,寫在一個例子C++ 11:

c_srgb find_in_book(const c_HVC &HVC) { 
    auto b = munsell.mun_to_rgb_book.find(HVC); 
    if(b != munsell.mun_to_rgb_book.end()) { 
     c_srgb f = b->second; 
     return f; 
    } else { 
     c_srgb ret; 
     ret.r=ret.g=ret.b=0; 
     return ret; 
    } 
} 

我更喜歡這樣的:

c_srgb find_in_book(const c_HVC &HVC) { 
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<dj::color::c_HVC,dj::color::c_srgb,std::less<dj::color::c_HVC>,std::allocator<std::pair<const dj::color::c_HVC,dj::color::c_srgb>>,false>>> b = munsell.mun_to_rgb_book.find(HVC); 
    if(b != munsell.mun_to_rgb_book.end()) { 
     c_srgb f = b->second; 
     return f; 
    } else { 
     c_srgb ret; 
     ret.r=ret.g=ret.b=0; 
     return ret; 
    } 
}