主要功能可以在C ++中成为好友功能吗?
#include "stdafx.h"
#include <iostream>
using namespace std;
class A {
public:
A():i(10){}
private:
int i;
friend int main();
};
int main()
{
A obj;
cout<<obj.i;
return 0;
}
答案 0 :(得分:5)
函数
main
不得在程序中使用。
这条规则的确切含义尚不清楚。标准正式定义了相关术语 odr-used 的语义,但不仅仅是使用。
为安全起见,假设此规则意味着“函数main
不应在friend
声明中命名。”
有趣的是,尽管此规则的措辞与C ++ 03相同,但在该版本中,我们现在所知的 odr-used 尚未重命名,而且这条规则明确指出这个概念。我想知道从使用到 odr-used 重命名时是否忽略了这一点。如果在这里故意不使用新术语,那么该决定的理由可能会阐明禁止使用的确切用途。
Shafik found重命名发生在N3214中,并且此规则有意未更改为 odr-use ,但它没有解释原因。
答案 1 :(得分:4)
主要功能可以在C ++中成为好友功能吗?
是的,它可以。
您的班级friend
中的A
声明授予函数main()
访问其非公开数据成员名称的权限(在本例中为i
):
friend int main();
对象obj
是默认构造的,A
的构造函数将i
的值设置为10
:
A() : i(10) {}
// ^^^^^^^
// Initializes i to 10 during construction
然后,将值obj.i
插入到标准输出中:
cout << obj.i;
// ^^^^^
// Would result in a compiler error without the friend declaration