내부 링크를 정의하는 데 오랫동안 static
키워드를 사용했습니다. 나중에 익명의 네임 스페이스에서 로컬 객체를 래핑하는 C++ 스타일로 전환했습니다.익명의 네임 스페이스 : 정말 훌륭합니까?
그러나 익명의 네임 스페이스로 몇 년 동안 작업했을 때 나는 static
키워드로 작업하기가 훨씬 쉽다고 생각하기 시작했습니다.
일반적인 문제는이 패턴을 가지고있다 : 특정 기능은 내부 또는 외부 링크가있는 경우
namespace {
// ...five pages of code...
} // namespace
이전 C 스타일의 반대로 지금, 많이 스크롤해야 볼하려면를 어디 함수/객체 앞에 static
이 있는지 확인할 수 있습니다.
익명의 네임 스페이스가 있습니다. static
은 typedef를 숨길 수 없습니다.하지만 개인적으로는별로 관심이 없습니다.
당신의 책임은 무엇입니까? 익명의 네임 스페이스의 승리가 그로 인해 가독성이 떨어짐을 보증합니까? 아니면 내가 잘못 됐어?
네임 스페이스 범위의'static' 함수는 더 이상 사용되지 않습니다. 사용하지 않는 충분한 이유가 있습니다. anon 네임 스페이스의 함수는 외부 링크가 있다는 점을 제외하면'static'의 모든 이점을 가지고 있습니다. 후자는 이미 익명의 네임 스페이스에 정의 된 이름을 내 보낸 섹션에서 제거하여 컴파일러가 처리했다고 생각합니다. –
@Gene 실제로 정적 함수는 절대로 사용되지 않습니다. deprecation은 * objects *에 대해서만 사용되었습니다. 그러나 n3225에서는 deprecation이 제거되었습니다. C++ 0x에서는 객체 또는 함수에 내부 링크를 제공하기 위해 더 이상 사용되지 않습니다. 또 다른 차이점은 명명되지 않은 네임 스페이스가 외부 연결을 유지한다는 것입니다. 네임 스페이스 및 해당 내용은 C++ 0x에서 내부 연결을 갖게됩니다. 따라서 정적 방법과 네임 스페이스 간에는 더 이상 차이가없는 것처럼 보입니다. 단, 네임 스페이스 방식은 'namespace {int a; } int a;'. –
@Johannes : C++ 0x는 내부 링크가있는 템플릿 매개 변수를 허용합니까, 아니면 큰 변화를 가져 왔습니까? –