Der Kommaoperator wertet alle Operanden von links nach rechts aus und das Ergebnis ist der Wert des letzten Operanden.
Dies ist vor allem in for-Schleifen nützlich, wenn Sie im "Inkrement" -Teil mehrere Aktionen ausführen möchten, z. B. (Umkehren einer Zeichenfolge).
for (int lower = 0, upper = s.size() - 1; lower < upper; ++lower,
std::swap(s[lower], s[upper]);
Ein weiteres Beispiel, bei dem es sich möglicherweise um eine Option handelt (alle Vorkommen in einer Zeichenfolge finden):
#include <string>
#include <iostream>
int main()
{
std::string s("abracadabra");
size_t search_position = 0;
size_t position = 0;
while (position = s.find('a', search_position), position != std::string::npos) {
std::cout << position << '\n';
search_position = position + 1;
}
}
Insbesondere logisch und kann für diese Bedingung nicht verwendet werden, da sowohl Null als auch Nicht-Null bedeuten können, dass das Zeichen in der Zeichenfolge gefunden wurde. Mit Komma wird dagegen position = s.find()jedes Mal aufgerufen, wenn die Bedingung ausgewertet wird, aber das Ergebnis dieses Teils der Bedingung wird einfach ignoriert.
Natürlich gibt es auch andere Möglichkeiten, die Schleife zu schreiben:
while ((position = s.find('a', search_position)) != std::string::npos)
oder nur
while (true) {
position = s.find('a', search_position);
if (position == std::string::npos)
break;
...
}
int a = 0, b = 0;.