Эти термины очень широки и не имеют четкого определения в глобальном масштабе, но вот наиболее логичные определения для них:
Первоклассные значения - это те, которые имеют реальные, осязаемые значения и поэтому могут использоватьсяи использовать в качестве переменных, аргументов, возвращаемых значений или чего-либо еще.
Это действительно не нуждается в тщательном примере, не так ли?В C int - это первый класс.
Значения второго класса более ограничены.У них есть значения, но они не могут использоваться напрямую, поэтому компилятор намеренно ограничивает то, что вы можете с ним делать.Вы можете ссылаться на них, так что у вас все еще может быть значение первого класса, представляющее их.
Например, в C функция является значением второго класса.Его нельзя изменить, но на него можно вызывать и ссылаться.
Значения третьего класса еще более ограничены.Они не только не имеют значений, но взаимодействие полностью отсутствует, и часто оно существует только для использования в качестве атрибутов времени компиляции.
Например, в Rust время жизни является значением третьего класса.Вы не можете использовать всю жизнь.Вы можете только получить его в качестве параметра шаблона, вы можете только использовать его в качестве параметра шаблона ( только при создании новой переменной), и это all вы можете делать с ним.
Другой пример, в C ++, структура или класс - это значение третьего класса.Это не требует особых объяснений.