동일한 이름이 나오면 효율은 같습니다. 함수 이름의 철자가 어떻게 동일한 함수가 호출되는지에 관계없이 동일합니다. 가장 큰 차이점은 이름을 찾는 방법입니다. 완전한 자격을 사용하면 예를 들어 인수에 의존하는 룩업 (look-up)이 방지되므로 이해하기 쉽습니다.
물론 사용자 정의 포인트가있는 경우 인수 종속적 인 조회가 필요없는 정규화되지 않은 호출을 사용하고자 할 것입니다. 사용자 정의 포인트에 대한 기본 구현이 필요하지 않은 경우 using
선언이나 심지어 using
지시문을 가질 필요가 없습니다. 사용자 지정 지점을 잘못 사용하면 은에 부정적인 영향을 미칩니다. T
는 사용자 정의 swap()
을 가지고
template <typename T>
void some_function(T& v1, T& v2) {
std::swap(v1, v2); // <--- this is bad! It uses the default implementation
using std::swap; // make a default implementation visible
swap(v1, v2); // <--- this is better: if it exists uses T's swap()
}
경우 가능성이 더 효율적 std::swap()
보다 값 v1
및 v2
의 사본의 원인이 될 수 있습니다 : swap()
를 사용하는 경우 예를 들어, 하지 자격이 이름을 사용할까요. 이동 가능 유형 T
과의 차이는 그다지 나쁘지는 않지만 여전히 상당 할 수 있습니다. 물론 여기서의 문제는 자격의 사용이나 자격의 사용이 아니라, swap()
이 T
으로 오버로드되었는지 여부에 따라 함수를 호출하는 두 가지 방법이 서로 다른 기능을 찾을 수 있다는 사실입니다.
BTW, 효율성에 관심이 있으시면 do not use std::endl!
효율성에 차이가 없습니다. –
범위 해석 연산자를 사용하지 않고 무엇을 의미합니까 _ "? 귀하의 예제에서는 그것을 두 번 사용합니다. _with_를 의미합니까? –