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_에 대해 중복된다. 자동으로 '인라인'됩니다. –