0 Daumen
31 Aufrufe

gegeben ist folgender Lambda-Ausdruck in C++:

#include <iostream>
using namespace std;
int* f = 0;
int main()
  {
    // Lambda-Ausdruck
    [](){[](){[=](){return !f && f ? [](void){cout << "Paradoxon!" << endl;}() : [](){cout << "Gratulation!" << endl;}();}();};}();
  }
Wo muss hier überall void reingeschrieben werden, damit der Text "Gratulation" am ende herauskommt. Ich bin am Verzweifeln!!!

Danke

Gefragt von

1 Antwort

0 Daumen
 
Beste Antwort

Das erinnert mich fast schon an ein Coding-Rätsel :-)

Eine (getestete und funktionierende) Lösung ist:

#include <iostream>
using namespace std;
int* f = 0;
int main()
  {
    // Lambda-Ausdruck
    [](void){[](void){[=](void){return !f && f ? [](void){cout << "Paradoxon!" << endl;}() : [](void){cout << "Gratulation!" << endl;}();}();}();}();
}

Theoretisch könntest Du auch in main() noch ein void einsetzen, was jedoch keinen Einfluss auf die Funktionalität hat. Dass man void in leere Parameterlisten bei der Deklaration schreiben kann, ist Geschmackssache. In die übrigen Klammern darf das nicht rein, weil es sich hierbei Aufrufe der Lambdas handelt. 

Um den Leser maximal zu verwirren, kannst Du noch weitere Gleichheitsszeichen einstreuen:

#include <iostream>
using namespace std;
int* f = 0;
int main()
  {
    // Lambda-Ausdruck
[=](){[=](){[=](){return !f && f ? [](){cout << "Paradoxon!" << endl;}() : [](){cout << "Gratulation!" << endl;}();}();}();}();
  }

Beantwortet von 6,8 k

Ein anderes Problem?

Stell deine Frage

Ähnliche Fragen

Willkommen bei der Stacklounge! Stell deine Frage sofort und kostenfrei

x
Made by a lovely community
...