簡體   English   中英

自動類型歸納函數返回值

[英]auto type deduction of function return value

我正在觀看Scott Meyers的在線視頻,但他的演示結果卻有所不同。 這是代碼:

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

我對包含以下信息的返回行提出了警告:從返回“ void”的函數返回“ int&”。 為什么返回值會導致無效?

這是我的測試平台:

fetag@MacgicBox ~$ 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;

更新結論:最后,這是CLion解析組件的錯誤,他們承諾在下一版本中對其進行修復。 這是錯誤報告和反饋:

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

為什么返回值會導致無效?

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

...或示例不完整。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM