Выражения с побочными эффектами - это выражения, которые делают что-то иное, чем возвращают значение. Например:
#define PRINT_TWICE(x) std::cout << (x) << "," << (x)
int i = 0;
PRINT_TWICE(i++);
Не печатать 0 дважды, затем установить i в 1, как при вызове функции, будет напечатано 0 и 1, затем установить i в 2.
Часть о Распространенные ошибки означают, например, если я определяю макрос max
(как раздражает windows), то когда я пытаюсь вызвать std::numeric_limits<int>::max()
, я получаю синтаксическую ошибку, потому что последняя часть будет заменена макросом max. Этого можно избежать с помощью соглашений, таких как использование всех макросов в верхнем регистре, но тогда вы все равно можете столкнуться с кем-то, кто определит константы в качестве верхнего регистра, например.