constメンバー関数、インライン関数、友元関数、staticメンバー


テキストリンク:https://blog.csdn.net/qq_38646470/article/details/79795538コラムリンク:https://blog.csdn.net/column/details/20026.html[TOC]#1.constメンバー関数const修飾メンバー関数は、メンバー関数の後ろにconstを付け、const修飾thisポインタが指すオブジェクト、すなわち、このconstメンバー関数を呼び出すオブジェクトが関数内で変更されないことを保証します.
class Date
{
public :
void Display ()
{
    cout<

☛constオブジェクトは非constメンバー関数を呼び出すことはできませんconstメンバー関数を呼び出すことができます☛非constオブジェクトは非constメンバー関数とconstメンバー関数☛constメンバー関数内で他のconstメンバー関数を呼び出すことはできません非constメンバー関数☛非constメンバー関数内で他のconstメンバー関数非constメンバー関数を呼び出すことができます
#2.インライン関数はinlineで修飾された関数をインライン関数と呼び、コンパイル時にC++コンパイラがインライン関数を呼び出す場所が展開し、関数スタックのオーバーヘッドがなく、インライン関数がプログラムの実行効率を向上させる.
☛. inlineは空間で時間を変える方法で、関数の呼び出し額のオーバーヘッドを省く.したがって、コードが長い、またはループ/再帰的な関数は、インラインを使用するのに適していない.☛. inlineはコンパイラにとってただの提案であり、コンパイラは自動的に最適化され、inlineとして定義された関数内に循環再帰などがある場合、コンパイラは最適化時にインラインを無視します.☛. inlineは関数定義を一緒に置いてこそ、インライン関数になることができ、inlineを宣言する前に置くだけでは役に立たない.☛. クラス内で定義されたメンバー関数は、デフォルトではインライン関数として定義されます.
しかし、一般的なコンパイラでは、コンパイラが自動的に最適化されるため、インライン関数の効果は見られません.次にlinuxの下で見てみましょう.
#3.友元友元関数:C++の友元関数では、メンバー関数のように、クラス外でクラス内の任意のメンバーにアクセスできます.友元関数はキーワードfriendで説明されます.☛. 友元関数はクラスのメンバー関数ではありません.☛. 友元関数は、オブジェクトを介してすべてのメンバーにアクセスできます.プライベートおよび保護メンバーも同様です.友元関数:
友元クラス:
#4.staticメンバー
#5.Nにおけるコピー構造の最適化は、コードを参照してください.
class AA
{};
AA f (AA a)
{
return a ;
}
void Test1 ()
{
AA a1 ;
a1 = f(a1);
}
void Test2 ()
{
AA a1 ;
AA a2 = f(a1);
}

void Test3 ()
{
AA a1 ;
AA a2 = f(f(a1));
} 

次の質問に答えます.Test 1では、セカンダリAAのコピーコンストラクタが呼び出されます.Test 2では,二次AAのコピーコンストラクタが呼び出されている.Test 3で呼び出された__二次AAのコピーコンストラクタ.