2017-05-29 74 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。

......或者这个例子不完整。