http://cs.brown.edu/~jak/proglang/cpp/stltut/tut.htmlおよびhttp://www.geeksforgeeks.org/c-qsort-vs-c-sort/から、STLのソートメカニズムを使用する方がCのqsort()より高速であることがわかります。C++演算子はいつ実際にインライン化されますか?
これは、比較関数が「インライン化」されているためです。しかし、コンパイラエクスプローラhttps://godbolt.org/でgccコンパイラの出力を調べると、実際にインライン化される演算子を得ることができません。例えばhereを参照してください、コードは以下の通り:
は#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;
}
生成されたアセンブリコードは明らかにoperator<
ルーチンを呼び出します。 C++コンパイラはinline
キーワードを完全に無視しました!
正確にがの場合、演算子はインライン化されていますか?これは、例えば、より速いソーティングパフォーマンスを得るための鍵ですが、可能な限りいつでもそれを活用する方法を知っているとよいでしょう。
最適化をオンにしましたか? – Galik
ああ、私はそれがすべてだったと信じることができません – Mahkoe
注: 'inline'はメンバ関数のために冗長です_defined_はクラス本体の中にあります。自動的にインラインで作成されます。 –