我正在观看Scott Meyers的在线视频,并在演讲中得到了不同的结果。这是代码:
auto LookupValue(int i) {
static vector<int> values = {1, 2, 3, 4, 5};
return values[i];
}
我得到了一条关于返回线的警告信息:'返回'int&amp;'从函数返回'void''。 为什么返回值推断为无效?
这是我的测试床:
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的解析组件的一个错误,他们承诺在下一个版本中修复它。这是错误报告和反馈:
答案 0 :(得分:3)
为什么返回值推断为无效?
编译器犯了一个错误。它应该推导出int,而不是void。
......或者示例还没有完成。