2012-08-29 61 views
5

理論問題只是 - 爲什麼我不能寫這樣的代碼:auto關鍵字奇怪的行爲在C++ 11

auto auto foo = 0; 

首先自動關鍵字 - 存儲類說明(是的,我知道這是無用的和過時C++ 11),第二個自動關鍵字 - 自動類型說明符。

那麼,怎麼了?

再次 - 我真的不想在真實的代碼中使用它。

+0

查看C++ 11標準中的[dcl.spec.auto]。 * 5:在本節中未明確允許的情況下使用auto的程序是不合格的。*在C++ 03使用之前沒有提及。 – chris

+0

他們真的刪除了'auto'的舊含義。看到我自己的問題:http://stackoverflow.com/questions/12093717/why-old-usage-c03-of-auto-does-not-compile-under-c11。也許不相關 - 但我相信這是完全有效的:'static auto a = 7;' – PiotrNycz

回答

19

auto存儲類說明符不是「在C++ 11中無用並且不推薦使用」,它已被完全刪除。 auto關鍵字不再是存儲類說明符,不能作爲一個使用。

在C++ 11中,auto是一個簡單的類型說明符。

+0

哦,我看到:更改:刪除auto作爲存儲類說明符 – FrozenHeart

+2

是的,這是一個突破性變化,但並不重要因爲舊的'auto'(作爲存儲類說明符)是多餘的。 –

+0

非常感謝! – FrozenHeart

3

Stroustrup's FAQ

....汽車的老意義( 「這是一個局部變量」)現在是 非法的。一些委員會成員通過數百萬行代碼遍歷 的代碼,發現只有少數幾個用途 - 其中大部分都在 測試套件中,或者似乎是bug。

這表示很多沒有使用「auto」作爲存儲說明符的代碼。