2017-05-29 44 views
0

我在觀看Scott Meyers的在線視頻,並在他的演示文稿中獲得了不同的結果。下面是代碼:函數返回值的自動類型扣除

auto LookupValue(int i) { 
    static vector<int> values = {1, 2, 3, 4, 5}; 
    return values[i]; 
} 

我得到了與回報信息線華林:「返回'從函數返回'廉政&無效」。 爲什麼返回值推斷無效?

這裏是我的測試平臺:

[email protected] ~$ clang --version 
Apple LLVM version 8.1.0 (clang-802.0.42) 
Target: x86_64-apple-darwin16.6.0 
Thread model: posix 
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin 

只是一個快速更新: 我測試返回值如下,編譯DO設定的返回類型用積分和應通過值返回,因爲只有與1的最後一行輸出,其餘都爲0

cout << is_lvalue_reference<decltype(LookupValue(2))>::value << endl; 
cout << is_rvalue_reference<decltype(LookupValue(2))>::value << endl; 
cout << is_reference<decltype(LookupValue(2))>::value << endl; 
cout << is_pointer<decltype(LookupValue(2))>::value << endl; 
cout << is_void<decltype(LookupValue(2))>::value << endl; 
cout << is_integral<decltype(LookupValue(2))>::value << endl; 

更新的結論: 最後,這是克利翁的解析組件的錯誤,他們承諾解決它的下一個版本。下面是錯誤報告和反饋:

https://youtrack.jetbrains.com/issue/CPP-9906

+2

你用C++ 11或C++ 14編譯? – nefas

+1

C++ 14. C++ 11不支持函數的返回類型爲auto。 – fetag

+0

這就是爲什麼我問,它可能只是一個奇怪的錯誤消息,因爲在C++ 11中,您必須使用帶有auto的postfix返回類型。 – nefas

回答

3

爲什麼返回值演繹作廢?

編譯器犯了一個錯誤。它應該推斷int,而不是void。

......或者這個例子不完整。