C++中主要函数可以成为朋友函数吗?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;
}
C++中主要函数可以成为朋友函数吗?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;
}
主要功能能成为朋友函数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
标准的3.6.1(措词n3936草案,但它是在同一个C++ 03)说:
功能
main
应不能在程序中使用。
此规则的确切含义尚不清楚。该标准正式定义了相关术语odr-used的语义,但不是简单的使用。
为安全起见,假设此规则表示“函数main
不应在friend
声明中命名”。
有趣的是,虽然这条规则的措辞是相同的C++ 03,在该版本中,我们现在知道作为ODR使用的尚未改名,这条规则显然是指那个概念。我想知道这是否被忽视在重命名使用到odr-used。如果新的术语在这里没有被有意使用,那么这个决定的基本原理可能会说明准确地禁止使用什么。
Shafik found的重命名发生在N3214,这条规则是不故意改为ODR使用,虽然它并没有解释为什么。
“friend”声明不会使用标识符,但 –
@MattMcNabb:正确,但标准语言禁止所有使用,而不仅仅是使用odr。 –
好吧,我以为你在猜测这可能是一个缺陷,他们打算把它改成* odr-used *和其他所有东西。 –
好的,现在有什么问题?语言语法? –
它是如何工作的? friend允许函数int main()访问A的私有变量和函数.A的构造函数将i设置为10 int main()访问我(因为它是一个“朋友”并且可以访问私有变量i) 。 – Daboyzuk