方案一:
#include <iostream>
std::string Hello(void){return "Hello";}
std::string World(void){return "world!";}
int main(){
std::cout << Hello() << " " << World() << std::endl;
}
函数 Hello() 和 World() 存在于全局命名空间中。
这意味着它们可以被声明之后的任何其他函数调用(或者在这种情况下,我提供了定义并且不需要先声明)。
我有一个问题,因为随着我的项目变得越来越大,我包含了更多的头文件,这些头文件用很多函数填充了全局命名空间,并且我冒着函数签名冲突的风险,或者更糟糕的是,不小心调用了应该只调用的错误函数作为另一个功能的子任务。
我试图遵循将任务功能分解为子任务的范式,因此在另一个特定函数的范围之外调用特定函数是没有意义的。
这是一种解决方法,除了由于缩进深度导致代码变得不可读之外,我想知道是否存在任何性能或实现问题。lambda 函数目前对我来说有点神奇,所以我对不可预见的危险感到好奇。
方案二:
#include <iostream>
int main(){
auto Hello = [](void) -> std::string{return "Hello";};
auto World = [](void) -> std::string{return "world!";};
std::cout << Hello() << " " << World() << std::endl;
}
Hello() 和 World() 被封装在 main() 内部,不能从 main() 的作用域之外调用。
这就是不一样的一切吗?