나는 using-declarations에 대해 약간 혼란 스럽다. using foo::bar;
은 이라는 네임 스페이스를 현재 네임 스페이스로 가져 오지만 정적 또는 동적으로 발생하는 것으로 알고 있습니다.사용 선언은 정적입니까?
더 구체적으로 사용 선언은 오버 헤드를 유발합니까? 조건에 따라 같은 이름의 다른 기호를 가져올 수 있습니까? (즉, 나쁜 관행 것입니다,하지만 난 궁금 모두 같은)
나는 using-declarations에 대해 약간 혼란 스럽다. using foo::bar;
은 이라는 네임 스페이스를 현재 네임 스페이스로 가져 오지만 정적 또는 동적으로 발생하는 것으로 알고 있습니다.사용 선언은 정적입니까?
더 구체적으로 사용 선언은 오버 헤드를 유발합니까? 조건에 따라 같은 이름의 다른 기호를 가져올 수 있습니까? (즉, 나쁜 관행 것입니다,하지만 난 궁금 모두 같은)
네임 스페이스 확인은 컴파일 할 때 발생합니다. 런타임에 동적으로 변경할 수 없습니다.
한 조건에 따라 다른 기호를 가져 오는 방법은 처리기 지시문 및 매크로를 사용하는 것입니다 c++
에서
#ifdef USEA
using a::f;
#else
using b::f;
#endif
사용하여 선언은 어떤처럼 보이는 ... 그것은 고정해야하지만, 나는 이것을 확인하기 위해 아무것도 찾을 수 없습니다처럼
느낀다 다른 선언들. 그것은 쓰여지는 곳에 따라 자체 범위를 가지고 있습니다. 변수를 동적으로 선언 할 수 없습니다.
나는 OP가 "파일 범위"에서처럼 "정적"에 대해 이야기하고 있다고 생각하지 않습니다. 나는 그것이 정적 대 동적 (즉 : 컴파일 타임 대 런타임)에 대해 더 많은 것이라고 생각한다. – KABoissonneault
@KABoissonneault 왜 정적 저장 기간에 대해 말하고있는 걸 결정 했는가? –
범위의 개념이이 대답과 관련이 없다고 생각합니다. 증거로서, 당신의 대답이 암시하고있는 것이 무엇인지 혼란 스러웠습니다. – KABoissonneault
using
이를 컴파일러가 컴파일
조건에 따라 같은 이름의 다른 기호를 가져올 수 있습니까?
당신이 말하는 조건에 달려 있습니다. 프리 프로세서의 조건이 #ifdef
인 경우 가능합니다. 런타임 조건을 생각하면 아니요, using
은 런타임에 수행되지 않습니다.
"심볼 가져 오기"는 개념적 일뿐입니다. 실제로, 네임 스페이스'foo'에 대한'using' 선언은 비 네임 스페이스 한정 기호가'foo'에서 오는 기호를 참조 할 수 있다는 것을 컴파일러에게 알려줍니다. 실행시 오버 헤드는 존재하지 않습니다. 런타임시 기호가 (대부분) 존재하지 않기 때문입니다. 컴파일 타임 오버 헤드가 있는지 여부는 컴파일러에 따라 다릅니다. – KABoissonneault
감사합니다. 실제로 아래 답변보다 훨씬 도움이됩니다. – Eternal