Как будет выглядеть вывод, если моя программа использовала вызов по имени? - PullRequest
0 голосов
/ 17 мая 2018

Итак, это мой код, и я знаю, что вывод для вызова по значению равен

Here is f
main: z = 15 

Что было бы, если бы язык использовал вызов по имени вместо вызова по значению?

int f() {
    cout << "Here is f" << endl;
    return 5;
}
int g(int a) {
    int x = a;
    int y = 2 * a;
    return x + y;
}
int main() {
    int z = g(f());
    cout << "main: z = " << z << endl;
}

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Вы можете смоделировать вызов по имени с помощью std::function и адаптировать синтаксис:

int f() {
    std::cout << "Here is f" << std::endl;
    return 5;
}

int g(std::function<int()> a) {
    int x = a();
    int y = 2 * a();
    return x + y;
}
int main() {
    int z = g(f);
    cout << "main: z = " << z << endl;
}

С выводом:

Here is f
Here is f
main: z = 15

Демо

0 голосов
/ 17 мая 2018

Вы можете сделать это так:

#define f(n) (cout << "Here is f" << endl, n)

#define g(n) (n + 2 * n)

int main()
{
    int z = g(f(5));
    cout << "main: z = " << z << endl;
}

"Тело" f() оценивается дважды, потому что оно используется дважды в g().

...