Эти два четко разделены, по крайней мере, при некоторых обстоятельствах. Например, в C или C ++ есть объявления, которые просто объявляют вещи, и есть определения, которые объявляют и их создают, и (только в C ++) есть выражения new
, которые создают объекты без объявляя их (и, возможно, malloc делает то же самое в C).
Аналогично, в языке, который поддерживает лямбда-выражения, создание и объявление разделены - лямбда-выражение создает что-то (например, функцию), но не (само по себе) не объявляет это (связывает с ним имя).