2016-01-04 14 views
5

In C++ 14 so etwas wie dies wurde legalisiert (für lambdas): -Auto als Funktionsargument

auto l = [](auto x, auto y) { return x+y; }; 

jedoch so etwas wie das ist immer noch nicht legal: -

auto sum (auto x, auto y) 
{ 
    return x+y; 
} 

Meine Neugier Warum wurde der zweite nicht zum Standard hinzugefügt (obwohl er hoffentlich in C++ 17 hinzugefügt wird)? Was waren die Profis & Nachteile der zweiten?

+0

Vorlage viel !? – StoryTeller

Antwort

6

Es wurde nicht hinzugefügt, weil es eine andere Sache hinzuzufügen ist und die Zeit nicht unendlich ist. Wir können nicht erwarten, dass alle nützlichen Verbesserungen auf einmal hinzugefügt werden, oder? Wie Sie festgestellt haben, wird es in C++ 17 sein.

+0

Zeit * ist * endlich. – YSC

+0

Jetzt bin ich verwirrt. Zeit ist unendlich oder Zeit ist endlich oder Zeit ist beides? Paging [physics.stackexchange] (http://physics.stackexchange.com/) – AndyG

+1

Um alle glücklich zu machen, sagen wir, dass die Zeit "O (unendlich)" ist. – erip

3

Es ist Teil eines TS, der nicht rechtzeitig für C++ 14 bereit war.

Es wird zu

template <typename T, typename U> 
auto sum(T x, U y) { return x+y } 

Der einzige pro Äquivalent sein ist, dass es etwas kürzer. Alles andere ist gleich.

+0

Einschließlich der ODR-Auswirkungen? Definition in jeder TU usw.? (Muss sein, nehme ich an - was mich denken lässt, dass diese neue Funktion nur ein großer Haufen Verwirrung ist, die darauf wartet, passiert zu sein) –

+0

@LightnessRacesinOrbit ich glaube nicht, dass es verwirrend sein wird, wenn man an Vorlagen gewöhnt ist. –

+0

@AnkitAcharya: Vielleicht aber die Feature ist buchstäblich "eine Vorlage wie eine Nicht-Vorlage aussehen". Scheint nicht wie eine brillante Idee für mich. –

Verwandte Themen