3

C++ のグローバル名前空間にソート関数があるのはなぜですか? このコードがコンパイルされる理由

#include <iostream>
#include <vector>

int main() {
    std::vector<int> array(10);
    sort(array.begin(), array.end());
}

PS: clang++ --std=c++11 --stdlib=libc++ ./test.cpp

4

1 に答える 1

7

sortはグローバル名前空間ではなく、std. ただし、 の結果の型も含まれるvector::begin() 場合stdがあります (これは実装に依存します)。その場合std::sortは、ADL (引数依存ルックアップ) によって検出されます。

std::sortADL によって検出されたくない場合は、修飾されていない呼び出しsortの代わりに、修飾された呼び出しを行うことができます::sort(array.begin(), array.end())

于 2013-11-03T14:03:08.797 に答える