Подтвердить что ты не робот

Почему sizeof считается оператором?

Почему sizeof считается оператором, а не функцией?

Какое свойство необходимо квалифицировать как оператор?

4b9b3361

Ответ 1

Поскольку стандарт C так говорит, и он получает единственное голосование.

Как последствия:

  • Операндом sizeof может быть заключенный в скобки тип sizeof (int) вместо выражения объекта.
  • Скобки не нужны: int a; printf("%d\n", sizeof a); отлично. Они часто видны, во-первых, потому что они необходимы как часть выражения для выражения типа, а во-вторых, потому что sizeof имеет очень высокий приоритет, поэтому sizeof a + b не совпадает с sizeof (a+b). Но они не являются частью вызова sizeof, они являются частью операнда.
  • Вы не можете взять адрес sizeof.
  • Выражение, являющееся операндом sizeof, не оценивается во время выполнения (sizeof a++ не изменяет a).
  • Выражение, являющееся операндом sizeof, может иметь любой тип, кроме void или типов функций. Действительно, такая точка размера.

Функция будет отличаться во всех этих точках. Вероятно, есть и другие различия между функцией и унарным оператором, но я думаю, что это достаточно, чтобы показать, почему sizeof не может быть функцией, даже если есть причина, по которой она хочет быть.

Ответ 2

Он может использоваться как константа времени компиляции, что возможно только в том случае, если это оператор, а не функция. Например:

union foo {
    int i;
    char c[sizeof(int)];
};

Синтаксически, если это не был оператор, тогда он должен был быть макросом препроцессора, поскольку функции не могут принимать типы в качестве аргументов. Это было бы трудным макросом для реализации, поскольку sizeof может принимать как типы, так и переменные в качестве аргумента.

Ответ 3

Поскольку стандарт C так говорит, и он получает единственное голосование.

И стандарт, вероятно, правильный, потому что sizeof принимает тип и

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

Кроме того, когда функции используются так часто, что они эволюционировали быстрее или проще обозначений, чем общая форма F (x, y, z,...), полученные специальные формы также называются операторами. Примеры включают инфиксные операторы, такие как добавление "+" и деление "/", и постфиксные операторы, такие как факториал "!". Это использование не связано со сложностью вовлеченных субъектов.

(Википедия)

Ответ 4

Потому что это не функция. Вы можете использовать его так:

int a;
printf("%d\n", sizeof a);

Функция имеет точку входа, код и т.д. Функция должна запускаться во время выполнения (или внутри), sizeof должен быть определен во время компиляции.

Ответ 5

Потому что:

  • когда вы передаете значение функции, размер объекта не передается функции, поэтому функция sizeof "не имеет способа определить размер
  • в C, функции могут принимать только один тип аргумента; sizeof() должен принимать всевозможные вещи differnet (как переменные, так и типы! Вы не можете передать тип функции в C)
  • вызов функции включает в себя создание копии аргументов и других ненужных служебных данных

Ответ 6

Существует небольшое отличие от функции - значение sizeof разрешается во время компиляции, но не во время выполнения!

Ответ 7

Поскольку это оператор времени компиляции, для вычисления размера объекта требуется информация типа, доступная только во время компиляции. Это не выполняется для С++.

Ответ 8

Оператор sizeof - это объект компиляции, не исполняемый, и не нуждается в скобках, как функция. Когда код компилируется, он заменяет значение размером этой переменной во время компиляции, но в функции после выполнения функции выполняется, тогда мы будем знать возвращаемое значение.

Ответ 9

Оператором

sizeof() является время компиляции. Его можно использовать для определения параметров или аргументов.

Ответ 10

Sizeof(), я думаю, очевидно, что это и функция, и оператор. Почему? Потому что функция содержит круглые скобки для ввода на этапе ввода. Но в основном операторы причин операторов также являются символами действия, поэтому sizeof - это оператор действия, который действует на операнд в скобках.