2017-05-29 2 views
0

Ich beobachte Scott Meyers Online-Video und habe ein anderes Ergebnis mit seiner Präsentation. Hier ist der Code:Auto-Typ Abzug der Funktion Rückgabewert

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

ich mit den Informationen einen Waring für die Rückleitung bekam: ‚Return‚int &‘aus einer Funktion zurückkehrt 'Leere‘. Warum der zurückkehrende Wert herleiten, um ungültig zu machen?

Hier ist meine Testbed:

[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 

nur ein kurzes Update: Ich teste den Wert Rückkehr wie folge und die Compilierung DO den Rückgabetyp mit integrierten eingestellt und soll von Wert, weil nur zurückgeschickt werden die letzte Zeile Ausgang mit 1, die anderen sind alle 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; 

Update-Fazit: Schließlich dabei um einen Fehler der Parse-Komponente von CLION ist, und sie versprechen es in der nächsten Version zu beheben. Hier ist der Fehlerbericht und Feedback:

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

+2

Kompilieren Sie in C++ 11 oder C++ 14? – nefas

+1

C++ 14. C++ 11 unterstützt den Rückgabetyp von Funktionen nicht automatisch. – fetag

+0

Deshalb habe ich gefragt, es könnte einfach eine seltsame Fehlermeldung gewesen sein, aufgrund der Tatsache, dass Sie mit C++ 11 Postfix Rückgabetyp mit Auto verwenden müssen. – nefas

Antwort

3

Warum die Rückkehr Wert deduce ungültig zu erklären?

Der Compiler hat einen Fehler gemacht. Es sollte int, nicht void ableiten.

... Oder das Beispiel ist nicht vollständig.