1. ホーム
  2. c

[解決済み] 純機能のメリット

2023-06-17 14:39:15

質問

今日、純粋関数について読んでいたのですが、その使い方で混乱しました。

関数は、それが同じ入力のセットに対して同じ値のセットを返し、任意の観察可能な副作用を持っていない場合、純粋であると言われています。

strlen() は純粋な関数であるのに対し rand() は不純なものです。

__attribute__ ((pure)) int fun(int i)
{
    return i*i;
}

int main()
{
    int i=10;
    printf("%d",fun(i));//outputs 100
    return 0;
}

http://ideone.com/33XJU

上記のプログラムでは、以下のように pure の宣言がない場合と同じように動作します。

として関数を宣言することの利点は何ですか? pure [出力に変化がない場合)?

どのように解決するのですか?

pure は、コンパイラが関数に対して特定の最適化を行うことができることを知らせます。

for (int i = 0; i < 1000; i++)
{
    printf("%d", fun(10));
}

純粋な関数の場合、コンパイラはその関数が fun(10) を1000回ではなく、一度だけ評価する必要があることを知ることができます。複雑な関数の場合、これは大きな勝利です。