Передать троичный оператор в параметр функции - PullRequest
0 голосов
/ 12 апреля 2020

Могу ли я передать троичный оператор параметру функции?

int test(int a, int b, int c) {
    return a+b+c;
}

int nn = 0;
int a = test(1, 1 | (2 ? nn : 0), 1); // test(1, 1 | 0, 1)

n = 1;
a = test(1, 1 | (2 ? nn : 0), 1); // test(1, 1 | 2, 1)

Ответы [ 2 ]

3 голосов
/ 12 апреля 2020

Вы не пропускаете троичного оператора. Вы передаете значение вычисления выражения с помощью троичного оператора.

Вы можете использовать любое выражение в качестве аргумента, который создает значение, тип которого не противоречит типу соответствующего параметра.

0 голосов
/ 12 апреля 2020

Вы не передаете никаких операторов, я упрощу ваш код, чтобы показать это

Для первой части,

int nn = 0;
int a = test(1, 1 | (2 ? nn : 0), 1); // test(1, 1 | 0, 1)

Упрощение последней строки приводит к

int a = test(1, 1 | (2 ? 0 : 0), 1); // (1)
int a = test(1, 1 | 0, 1); // (2)
int a = test(1, 1, 1); // (3)
int a = 3;

для второй части,

n = 1;
a = test(1, 1 | (2 ? n : 0), 1); // test(1, 1 | 2, 1)

Упрощение последней строки приводит к

int a = test(1, 1 | (2 ? 1 : 0), 1); // (1)
int a = test(1, 1 | 1, 1); // (2)
int a = test(1, 1, 1); // (3)
int a = 3;
...