Почему sizeof
считается оператором, а не функцией?
Какое свойство необходимо квалифицировать как оператор?
Почему sizeof
считается оператором, а не функцией?
Какое свойство необходимо квалифицировать как оператор?
Поскольку стандарт C так говорит, и он получает единственное голосование.
Как последствия:
sizeof (int)
вместо выражения объекта.int a; printf("%d\n", sizeof a);
отлично. Они часто видны, во-первых, потому что они необходимы как часть выражения для выражения типа, а во-вторых, потому что sizeof имеет очень высокий приоритет, поэтому sizeof a + b
не совпадает с sizeof (a+b)
. Но они не являются частью вызова sizeof, они являются частью операнда.sizeof a++
не изменяет a).Функция будет отличаться во всех этих точках. Вероятно, есть и другие различия между функцией и унарным оператором, но я думаю, что это достаточно, чтобы показать, почему sizeof не может быть функцией, даже если есть причина, по которой она хочет быть.
Он может использоваться как константа времени компиляции, что возможно только в том случае, если это оператор, а не функция. Например:
union foo {
int i;
char c[sizeof(int)];
};
Синтаксически, если это не был оператор, тогда он должен был быть макросом препроцессора, поскольку функции не могут принимать типы в качестве аргументов. Это было бы трудным макросом для реализации, поскольку sizeof
может принимать как типы, так и переменные в качестве аргумента.
Поскольку стандарт C так говорит, и он получает единственное голосование.
И стандарт, вероятно, правильный, потому что sizeof
принимает тип и
В общем случае, если либо домен, либо кодомен (или оба) функции содержат элементы, значительно более сложные, чем действительные числа, эта функция называется оператором. И наоборот, если ни домен, ни кодомен функции не содержат элементов, более сложных, чем действительных чисел, эта функция, скорее всего, будет называться просто функцией. Тригонометрические функции, такие как косинус, являются примерами последнего случая.
Кроме того, когда функции используются так часто, что они эволюционировали быстрее или проще обозначений, чем общая форма F (x, y, z,...), полученные специальные формы также называются операторами. Примеры включают инфиксные операторы, такие как добавление "+" и деление "/", и постфиксные операторы, такие как факториал "!". Это использование не связано со сложностью вовлеченных субъектов.
Потому что это не функция. Вы можете использовать его так:
int a;
printf("%d\n", sizeof a);
Функция имеет точку входа, код и т.д. Функция должна запускаться во время выполнения (или внутри), sizeof должен быть определен во время компиляции.
Потому что:
sizeof
"не имеет способа определить размерСуществует небольшое отличие от функции - значение sizeof разрешается во время компиляции, но не во время выполнения!
Поскольку это оператор времени компиляции, для вычисления размера объекта требуется информация типа, доступная только во время компиляции. Это не выполняется для С++.
Оператор sizeof - это объект компиляции, не исполняемый, и не нуждается в скобках, как функция. Когда код компилируется, он заменяет значение размером этой переменной во время компиляции, но в функции после выполнения функции выполняется, тогда мы будем знать возвращаемое значение.
sizeof()
является время компиляции. Его можно использовать для определения параметров или аргументов.
Sizeof(), я думаю, очевидно, что это и функция, и оператор. Почему? Потому что функция содержит круглые скобки для ввода на этапе ввода. Но в основном операторы причин операторов также являются символами действия, поэтому sizeof - это оператор действия, который действует на операнд в скобках.