首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是“函数的使用”?

什么是“函数的使用”?
EN

Stack Overflow用户
提问于 2010-08-26 04:03:31
回答 4查看 186关注 0票数 3

3.6.1/3国家-

“函数main不应在程序中使用 (3.2)”。

下面这个基于学术动机的程序以几种方式使用“main”这个名字,我认为这是合法的。这是基于这样的假设:“函数的使用”与调用该函数有关(直接/间接)。

代码语言:javascript
复制
struct MyClass{ 
private: 
   MyClass(){}  
   friend int main(); 
};   

int main(){  
   MyClass m;  
   int (*p)() = main; // but don't do anything 
}

  1. 公平,代码使用gcc/VS 2010编译。
  2. I对Comeau的错误感到惊讶。

Comeau online在声明'p‘(即接受'main’的地址时)时会出错,而不是在声明‘main’作为朋友时出错。

关于C++03,谁/什么是正确的?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-26 04:10:37

“C++03”第3.2/2条规定:

如果对象或未重载函数的名称出现在可能计算的表达式中,则使用

它接着列出了使用其他各种类型实体的构成;这是这里重要的一种。

朋友声明不是一种表达。

当函数main()被转换为指针,而该指针被赋值给p时,该表达式是一个表达式,并且它可能被计算(C++03§3.2/2):

表达式可能会被计算,除非它出现在需要积分常量表达式的地方(见5.19),是sizeof运算符的操作数(5.3.3),或者是typeid运算符的操作数,并且表达式没有指定多态类类型的值(5.2.8)。

票数 6
EN

Stack Overflow用户

发布于 2010-08-26 04:37:43

C++03关于C++和ISO兼容性的附录C.1如下:

3.6的变动

Change:Main不能递归调用,也不能获取其地址

基本原理:主要功能可能需要特殊操作。

对原始特征的影响:删除语义定义良好的特征

转换的困难:平凡:创建一个中间函数,如mymain(argc,argc)。

广泛使用的:很少

票数 1
EN

Stack Overflow用户

发布于 2010-08-26 04:10:38

按照确切的措辞(“way be use ”),我认为第一个示例是合法的,因为它没有以任何方式使用该函数。它在某个地方添加了某种引用,并允许函数访问私有数据。它不使用main(),它提供了对它的更多访问。

第二个示例(以地址为例)实际上使用main()作为符号,方法是获取它的地址并将其放入指向函数的指针中。这不仅允许您轻松地打破不从程序中调用main的规则,它还必须与其交互(至少告诉main在哪里的信息)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3571959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档