为什么cout<

时间:2013-07-12 17:03:06

标签: c++

为什么cout<<main;在我的计算机上打印1?我以为它会打印主要的地址。但是当我使用printf("%x",main);时,我会得到不同的输出。

编辑:

我尝试了std::cout其他功能。我为每个案件得到1

2 个答案:

答案 0 :(得分:6)

这只是undefined behavior。它是行为不可预测的代码示例。

答案 1 :(得分:3)

void foo(){};
cout << foo << endl; 

函数指针将转换为bool,除非像这样使用它:

cout << reinterpret_cast<void*>(foo) << endl;

编辑:这是未定义的行为,main不能像其他函数指针一样使用。

C ++ 11(ISO / IEC 14882:2011)§3.6.1:主要功能

  

3函数main不得在程序中使用。 main的链接(3.5)是实现定义的。将main定义为已删除或将main声明为内联,静态或constexpr的程序是不正确的。名称main不以其他方式保留。 [示例:成员函数,类和枚举可以称为main,其他名称空间中的实体也可以称为main。 - 例子]