Beim Aufrufen std::sort()
eines std::array
:
#include <vector>
#include <array>
#include <algorithm>
int main() {
std::vector<int> foo{4, 1, 2, 3};
sort(begin(foo), end(foo));
std::array<int, 4> foo2{4, 1, 2, 3};
sort(begin(foo2), end(foo2));
}
Sowohl gcc als auch clang geben einen Fehler bei der Sortierung auf dem std::array
- clang zurück
Fehler: Verwendung des nicht deklarierten Bezeichners 'sort'; meinten Sie 'std :: sort'?
Ändern, um std::sort(begin(foo2), end(foo2))
das Problem zu beheben.
MSVC kompiliert den obigen Code wie geschrieben.
Warum der Unterschied in der Behandlung zwischen std::vector
und std::array
; und welcher compiler ist richtig?
std::sort
, die zu einer argumentabhängigen Suche führt (wie Sie es bereits für std::begin
und getan haben std::end
)?
namespace std
selbst dort definiert sind , wo ein einfacher Zeigertyp funktioniert hätte. Ich glaube, dies ist das Einfügen von Debug-Build-Prüfungen, um Überschreitungen und andere häufige Fehler zu erkennen.
sort(...
->std::sort(...
. Ich denke, dass ADL (argumentabhängige Suche) Sie auslöst. Das oder Abzugsleitfäden. Auf jeden Fall; Qualifizieren Sie immer die Funktionen, die Sie aufrufen.