С++ интересный синтаксис для печати новой строки в std:: cout

следующий код печатает квадрат символов '*':

int m = 5; int n=5;
for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
        std::cout << "*" << " \n"[j==5];

Вывод:

* * * * *
* * * * *
* * * * *
* * * * *
* * * * *

Мой вопрос касается части " \n"[j==5]. Кто-нибудь знает, как именно этот синтаксис работает?

Ответы

Ответ 1

" \n" - массив из 3 char s. Вы можете индексировать как обычный массив. Булевы значения неявно преобразуются в целые числа: от false до 0, true до 1. Поэтому он будет использовать '\n' для j == 5 и ' ', если нет,