0 Daumen
41 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

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;}();}();}();}();
  }

von 8,3 k

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage sofort und kostenfrei

x
Made by a lovely community
...