Поскольку вы пометили вопрос как «C», один из способов взглянуть на него - прочитать стандарт C.Как указывает этот ответ , инициализация (такая как int i = 0
) не является выражением сама по себе, и при строгом чтении стандарта =
здесь не является оператором в соответствии ск использованию этих терминов в стандарте .
Однако не так ясно, являются ли i
и 0
операндами.С одной стороны, стандарт C, похоже, не ссылается на части инициализации как операнды.С другой стороны, он не определяет термин «операнд» исчерпывающе.Например, можно было бы интерпретировать раздел 6.3 как называющий почти любую неоператорную часть выражения «операндом», и поэтому по крайней мере 0
будет квалифицироваться как единица.
(Также обратите внимание, что если кодвместо int i; i = 0;
, последний i
и 0
определенно были бы обоими операндами оператора присваивания =
. Остается неясным, было ли целью вопроса провести различие между присваиванием и инициализацией.)
Помимо стандарта C, вы также ссылаетесь на Википедию , в частности:
В вычислениях операнд является частью компьютерной инструкции, которая определяет, чтоданные должны обрабатываться или обрабатываться, и в то же время представлять сами данные.
Если мы рассмотрим контекст «компьютерной инструкции», код C может быть наивно переведен в код сборкикак mov [ebp-4], 0
, где два операнда будут явно [ebp-4]
(место, где хранится переменная с именем i
) и0
, который по этому определению сделал бы операнды i
и 0
.Тем не менее, в действительности код, вероятно, будет оптимизирован компилятором в другую форму, такую как хранение только i
в регистре, и в этом случае обнуление может стать xor eax, eax
, где 0
больше не существует какявный операнд (но является результатом операции).Или целое 0
может быть оптимизировано и заменено каким-то другим значением, которое неизбежно будет присвоено.Либо вся переменная может в конечном итоге быть удалена, например, если она используется в качестве счетчика цикла, а цикл развернут.
Итак, в конце концов, это либо философский вопрос ("ноль существует как операнд, если его оптимизируют "), или просто вопрос выбора желаемого использования терминов (возможно, в зависимости от контекста обсуждения).