ラムダが状態を保存しなければならない場合、インライン化されない可能性があります。状態が保存されていない場合は、単純なフリー関数のようになり、インライン化される可能性が高くなります。ラムダはインライン化の機会が多い
標準はそれについて何か言いますか? LLVMの上に行くためのコンパイラを書く過去数年間、私の暇な時間の多くを費やしてきた誰かとして
class Window {public:int value = 5;};
class SomeClass:
{
public:
Window *w;
void DoSomething()
{
auto error = [&](int n)
{
std::cout << (w->value * 5);
return w->value * n;
};
auto error = [](Window *w, int n)
{
std::cout << (w->value * 5);
return w->value * n;
};
error(w, 7);
error(7);
// ...
error(w, 10);
error(10);
}
}
@CaptainObvlious私は、標準がそれについて何かを言うかどうか尋ねました。私が知る限り、この標準は異なるコンパイラに依存していません。 – James
コンパイラにインライン展開に問題がある場合は、バグを報告してください。 –
"*スタンダードはそれについて何か言いますか?*"いいえ、それはありません。 'inline'宣言されていないインライン関数は完全にインプリメンテーションに依存します(インライン関数はインライン関数でもインプリメンテーションに依存しますが、少なくとも標準ではインライン関数の可能性を認識しています)。 – Cornstalks