Von http://cs.brown.edu/~jak/proglang/cpp/stltut/tut.html und http://www.geeksforgeeks.org/c-qsort-vs-c-sort/, finden wir, dass die Verwendung der STL-Sortiermechanismus ist schneller als C's qsort().Wann sind C++ Operatoren wirklich inline?
Dies liegt daran, dass die Vergleichsfunktion "inline" ist. Wenn ich jedoch den Compiler-Explorer unter https://godbolt.org/ verwende, um die Ausgabe des gcc-Compilers zu überprüfen, kann ich keine Operatoren dazu bringen, tatsächlich inline zu werden. Siehe here für ein Beispiel-Code unten angegeben:
#include <string>
#include <algorithm>
#include <vector>
#include <cstdlib>
#include <iostream>
using namespace std;
class myClass {
public:
int key;
int data;
myClass(int k, int d) : key(k), data(d) {}
inline bool operator<(myClass& other) {
return key < other.key;
}
};
main() {
myClass c1(1,100), c2(2, 100);
if (c1 < c2) cout << "True" << endl;
else cout << "False" << endl;
}
Der erzeugte Assembler-Code macht deutlich einen Aufruf an die operator<
Routine. Der C++ - Compiler hat das Schlüsselwort inline
vollständig ignoriert!
Also, wenn genau sind die Betreiber inlined? Dies ist der Schlüssel zu einer schnelleren Sortierleistung, aber es wäre schön zu wissen, wie man es wann immer möglich ausnutzen kann.
Haben Sie die Optimierung aktiviert? – Galik
Oh wow, ich kann nicht glauben, dass das alles war – Mahkoe
Hinweis: 'inline' ist redundant für Member-Funktionen _defined_ innerhalb eines Klassenkörpers; Sie werden automatisch inline erstellt. –