Почему спад до указателя для аргумента массива не применяется к sizeof ()?

Ранее я читал вопрос, который был закрыт из-за того, что он является точной копией этого

Когда функция имеет определенный параметр массива размера -, почему он заменяется указателем?

и

Как найти указатель sizeof (, указывающий на массив )?

но после прочтения этого я все еще не понимаю, как работает sizeof (). Я понимаю, что передача массива в качестве аргумента такой функции, как

  void foo(int a[5])

приведет к распаду аргумента массива до указателя. То, что я не нашел в приведенных выше двух ссылках на вопросы, было четким ответом на вопрос, почему функция sizeof()сама по себе освобождена от (или, по крайней мере, кажется освобожденной от )этого поведения распада указателя. Если бы sizeof ()вела себя как любая другая функция, то

   int a[5] = {1,2,3,4,5};
   cout << sizeof(a) << endl;

тогда приведенное выше должно выводить 4вместо 20. Я пропустил что-то очевидное, поскольку это кажется противоречием поведения указателя распада??? Извините, что снова поднял этот вопрос, но мне действительно трудно понять, почему это происходит, несмотря на то, что я с удовольствием использовал эту функцию в течение многих лет, не задумываясь об этом.

7
задан Community 23 May 2017 в 11:48
поделиться