C++ 我们可以在C+;中重载main()函数吗+;?
既然C++允许函数重载,我们可以重载C++ 我们可以在C+;中重载main()函数吗+;?,c++,overloading,main,standards,C++,Overloading,Main,Standards,既然C++允许函数重载,我们可以重载main() 比如说, int main(const std::string &) { return 0; } int main(int argc, char *argv[]) { return main("calling overloaded main"); } gcc-4.3.4未编译此文件,并给出以下错误:(请参阅) prog.cpp:4:错误:“int main(const std::string&)”的第一个参数应该是“int”
main()
比如说,
int main(const std::string &)
{
return 0;
}
int main(int argc, char *argv[])
{
return main("calling overloaded main");
}
gcc-4.3.4
未编译此文件,并给出以下错误:(请参阅)
prog.cpp:4:错误:“int main(const std::string&)”的第一个参数应该是“int”prog.cpp:4:错误:“int main(const std::string&)”只接受零或两个参数
prog.cpp:在函数“int main(int,char**)”中:
程序cpp:8:错误:C函数“int main(int,char**)”的声明与冲突
程序cpp:4:错误:前面的声明“int main(const std::string&)”在这里
prog.cpp:在函数“int main(int,char**)”中:
程序cpp:10:错误:从“const char*”到“int”的转换无效
程序cpp:8:错误:函数“int main(int,char**)”的参数太少
prog.cpp:10:错误:此时在文件中
所以我想知道C++标准是否明确禁止超载<代码>主<代码>?如果是,哪种说法?是的,它明确禁止这样做。请参阅3.6.1p2 实现不应预定义主要功能。此功能不应过载
这样,主函数的名称就可以保持不混淆。也就是说,运行库可以调用具有固定名称的符号(例如
main
或\u main
)以跳转到main函数。库的代码不需要依赖于程序的main
函数的参数列表
还允许实现为
main
函数定义其他有效参数列表(例如,POSIX规范为环境变量指定了char**env
参数)。当main
的重载是一个“非主功能”时,或者它是否是一个“主功能”,因此它是一个入口点时,就不清楚了。假设,如果您要声明多个入口点,您可能希望得到一个错误,因此这些问题很重要 您所做的是声明程序执行的两个入口点。这是编译器禁止的,因为当你运行程序时,程序将不知道从哪里开始
我也看不出你为什么要在你的应用程序设计中这样做。
< P> >我的强>全局主函数(所有类外的主函数)不能在C++、#include<iostream>
using namespace std;
int main(int noofarg,char *values[])
{
std::cout<<"hello "<<endl<<values[0]<<endl<<values[1]<<endl<<noofarg;
return 0;
}
int main()
{
std::cout<<"hello main()";
return 0;
}
#包括
使用名称空间std;
int main(int noofarg,char*值[])
{
std::你对此有引证吗?@bdonlan:例如(ISO/IEC 14882:1998(E))懒惰的我。我应该查一下标准本身。+1.你能澄清一下你对POSIX的看法吗?你是说它允许第三个参数进入main吗?我看了规范,它提到了一个特殊的extern char**environ
作为变量。你可以想象这样一个系统是如何工作的。程序将从调用相应表单的唯一main()
。因此它会选择表单intmain(intargc,char*argv[])
中的一个。显然这不会发生,但如果需要的话,也不难想象会发生。
#include<iostream>
using namespace std;
class MainClass{
int main1()
{
std::cout<<"hello main()"<<endl;
return 0;
}
int main(int noofarg,char *values[])
{
std::cout<<"hello "<<endl<<values[0]<<endl<<values[1]<<endl<<noofarg;
return 0;
}
int main()
{
std::cout<<"hello main()";
return 0;
}
};
int main()
{
std::cout<<"hello main()";
return 0;
}