2010-11-06 127 views
1

考慮:使用聲明將名稱移動到另一個名稱空間?

namespace One { 
    void foo(int x) { 
    munch(x + 1); 
    } 
}; 

namespace Two { 
    // ... see later 
} 

... 
void somewhere() { 
    using namespace Two; 
    foo(42); 
    ... 

有以下兩個變量之間的區別:

一)

namespace Two { 
    void foo(int x) { 
    munch(x + 1); 
    } 
}; 

和b)

namespace Two { 
    using One::foo; 
}; 

編輯:很明顯, (a)重複代碼,這永遠不應該是一個好主意。問題更多的是有關重載分辨率等......如果在其他命名空間中有其他foo s或munch es會怎麼樣?

+0

「using One :: foo;」被稱爲使用聲明; using-directive是「using namespace N;」。 – 2010-11-06 19:39:31

回答

1

有了,其實都是不同的功能,但與B,這兩個功能是相同的:

assert(&One::foo == &Two::foo); 

這種情況很少會事宜;更大的擔憂是重複邏輯。

0

至於它們的用法是相同的。至於代碼,在情況下a)你正在複製函數foo()的代碼。也就是說,兩個版本都會在Two內提供foo()函數,但a)情況會生成foo兩次的代碼,因爲編譯器沒有任何提示發現它是相同的函數。