'使用函数'是什么意思

Chu*_*dad 3 c++ function

$ 3.6.1/3州 -

"函数main不得 在程序中使用(3.2)."

下面以学术为动机的示例程序使用了我认为合法的几种方式的名称"main".这是基于"函数的使用"与调用函数(直接/间接)相关的假设.

struct MyClass{ 
private: 
   MyClass(){}  
   friend int main(); 
};   

int main(){  
   MyClass m;  
   int (*p)() = main; // but don't do anything 
}
Run Code Online (Sandbox Code Playgroud)
  1. 很公平,显示的代码用gcc/VS 2010编译.

  2. 我很惊讶Comeau的错误.

Comeau online在声明'p'时(即在获取'main'的地址时)给出错误,但在声明'main'为朋友时却没有.

谁/什么是关于C++ 03的权利?

Jam*_*lis 6

C++03§3.2/ 2说:

如果对象或非重载函数的名称出现在可能已评估的表达式中,则使用该函数.

它接着列举什么是使用其他各类实体的; 这是重要的一个.

朋友声明不是表达.

当函数main()转换为指针并指定指针时p,这是一个表达式并且可能被评估(C++03§3.2/ 2):

表达式可能被评估,除非它出现在需要整数常量表达式的地方(见5.19),是运算sizeof符的操作数(5.3.3),或者是运算typeid符的操作数,表达式没有指定多态类的左值类型(5.2.8).