webentwicklung-frage-antwort-db.com.de

Gibt es ein Äquivalent zu Pythons "pass" in c ++ std11?

Ich möchte eine Aussage, die nichts tut, aber an Orten verwendet werden kann, die eine Aussage benötigen. Pass: http://docs.python.org/release/2.5.2/ref/pass.html

Edit: Nur gesehen: Wie führt man eine No-Op in C/C++ aus?

#define pass (void)0

Mein Problem gelöst. Vielen Dank!

18
Tommy

Semikolon oder leere Klammern sollten für Sie funktionieren

Zum Beispiel Python's

while some_condition():    # presumably one that eventually turns false
    pass

Könnte in folgendes C++ übersetzt werden

while (/* some condition */)
    ;

Oder

while (/* some condition */) {}

Vielleicht könnten Sie für den Fall des ternären Operators Folgendes tun:

x > y ? do_something() : true;
24
Prashant Kumar

Nein. Sie haben keine pass oder ein gleichwertiges Schlüsselwort . Sie können jedoch gleichwertigen Code ohne ein solches Schlüsselwort schreiben.

def f():
   pass

wird

void f() {}

und 

 class C:
     pass

wird

 class C {};

In verschiedenen Zusammenhängen kann eine andere Syntax nützlich sein. Zum Beispiel,

 class MyError(Exception):
        pass

wird

class MyError : public std::exception
{
      using std::exception::exception; //inherits constructor!
};

Wie Sie sehen können, müssen Sie in diesem Kontext using schreiben, um Konstruktoren von der Basisklasse zu erben. In Python führt pass das gleiche in einem ähnlichen Kontext aus.

Hoffentlich hilft das.

6
Nawaz

Wie in den Kommentaren erwähnt, wird dies nicht unterstützt weil es keinen Sinn macht . Der Bedingungsoperator kann einen von zwei Operanden auswerten. Zwei. Nicht eins.

Es ist nicht in Ordnung, den Operator zu missbrauchen, um in nur einem dieser Fälle eine bedingte Aktion durchzuführen. Tatsächlich ist es am besten, dass keiner der Operanden irgendwelche Nebenwirkungen hat. Dies ist kein Konstrukt "etwas tun", sondern ein Konstrukt "Gib mir eins von zwei Dingen".

Wenn Python das unterstützt, was Sie sagen, es würde dies unterstützen, dann wäre broken wo C++ nicht ist. Zufällig unterstützt Python es auch nicht.

Schreiben Sie stattdessen eine if-Anweisung:

if (x > y) {
   do_something();
}
else {
   /* Unimplemented at the moment */
}

Ich denke, in C++ wird nur eine leere Zeile (;) 'pass'

2
bboonn

Wie @bboonn vorschlägt:

 if (some_flag)
   ; // Do nothing

 else if (some_other_flag)
   do_something();
0
slaughter98

Ein Ansatz könnte sein:



Funktionen: die "Proto" -Funktion zurücknehmen und ein ';' wie einige oben angedeutet haben
Loops: Verwenden Sie natürlich break
Alles andere: Nach meiner Erfahrung lasse ich eine Funktion oder einen Codeabschnitt auskommentiert. Manchmal füge ich auch eine kleine, gekennzeichnete Zusammenfassung für spätere Bearbeitungszwecke hinzu.
Die Art und Weise, wie Sie dies angehen, sollte nur ungefähr so ​​angenehm sein. Tun Sie einfach das, was Sie wollen, damit es logisch funktioniert.

0