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