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::vectorund std::array; und welcher compiler ist richtig?
std::sort, die zu einer argumentabhängigen Suche führt (wie Sie es bereits für std::beginund getan haben std::end)?
namespace stdselbst 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.