值得注意的是,一个库(但不是标准 C++ 库,根据 3.6.1 [basic.start.main] 第 2 段,第一句:“实现不应预定义main
函数。”)可以只定义函数main()
并实现它以合适的方式,例如,调用app_main()
:
#include <initializer_list>
#include <string>
#include <vector>
extern int app_main(std::vector<std::string> const&);
int main(int ac, char* av[]) {
return app_main(std::vector<std::string>(av, av + ac));
}
由于main()
不能重载(根据 3.6.1 [basic.start.main] 第 2 段,第二句:“此函数不得重载。”)入口点需要不同的名称。由于std::initializer_list<T>
除了 using 之外无法构造,因此需要使用{ ... }
不同的类型。std::initializer_list<T>
在这样做的同时,上面的实现也选择将它们char*
变成std::string
对象。
要使用上述函数,应用程序只需实现app_main()
并调用它:
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
#include <cstdlib>
int app_main(std::vector<std::string> const& args) {
std::cout << "received the arguments: ";
std::copy(args.begin(), args.end(),
std::ostream_iterator<std::string>(std::cout, " "));
return EXIT_SUCCESS; // return statement can't be omitted, of course
}