計劃1:使用lambda函數來模擬詞法錯誤有沒有不可預知的性能/實現問題?
#include <iostream>
std::string Hello(void){return "Hello";}
std::string World(void){return "world!";}
int main(){
std::cout << Hello() << " " << World() << std::endl;
}
功能您好()和世界()在全局命名空間存在。
這意味着它們可以通過聲明後的任何其他函數調用(或者在本例中,我提供了定義並且不需要首先聲明)。
我有這個問題,因爲隨着我的項目變得越來越大,我包含了更多的頭文件,這些頭文件用很多函數填充全局名稱空間,並且我冒着函數簽名衝突,或者更糟的是,意外地調用了錯誤的函數只應該被稱爲另一個函數的子任務。
我想遵循功能分解任務到子任務的paradaim,因此它對特定函數在另一個特定函數的範圍之外被調用是沒有意義的。
這是一個解決方法,除了由於縮進深度導致代碼變得不可讀,我想知道是否有任何性能或實現問題。 lambda函數對我來說目前有點神奇,所以我對無法預料的危險感到好奇。
方案2:
#include <iostream>
int main(){
auto Hello = [](void) -> std::string{return "Hello";};
auto World = [](void) -> std::string{return "world!";};
std::cout << Hello() << " " << World() << std::endl;
}
你好()和世界()封裝內main()和不能從外部主()的範圍被調用。
這一切是不同的?
命名空間有什麼問題? – delnan
'使用名稱空間'太簡單了,因爲可以在多個模塊中使用相同的名稱空間。一個很好的例子,簡單地說就是全局的,好的命名空間。 –