Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
ViktorKozlov
134 / 126 / 59
Регистрация: 13.12.2012
Сообщений: 293
1

Имя функции в sizeof

15.03.2013, 13:53. Просмотров 591. Ответов 8
Метки нет (Все метки)

Доброго времени суток

Почему, если в sizeof написать имя функции, то компилятор пишет "error C2070: overloaded-function: illegal sizeof operand", даже если она никакая не overloaded и объявлена только один раз?
Например
C++
1
2
3
4
void r(){}
int main(){
    cout<<sizeof(r);    //error C2070: overloaded-function: недопустимый оператор sizeof
}
P.S. Знаю, что в sizeof преобразования к указателю не происходит и поэтому нужно писать &r, но просто любопытно, почему он так пишет, если функция вроде как не перегруженная . Это особенность VS такая или так и должно быть?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2013, 13:53
Ответы с готовыми решениями:

Sizeof(.) или constexpr size_t tmp = sizeof(.)
sizeof(...) или constexpr size_t tmp = sizeof(...) Как лучше с точки зрения...

Fwrite (buffer , sizeof(char), sizeof(buffer), pFile)
как записать часть массива чаров? допустим у нас arr; мне надо записать с...

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

sizeof( char * ) & sizeof(char)
Здравствуйте, не могу понять почему sizeof(char *) = 4 а sizeof(char) = 1. Ну...

Вызов функции не используя ее имя
Собственно, сабж. Задачку вот подкинули: нужно вызвать функцию так, что-бы ее...

8
ForEveR
В астрале
Эксперт С++
7997 / 4755 / 652
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
15.03.2013, 13:55 2
5.3.3/1
The sizeof
operator shall not be applied to an expression that has function or incomplete type, to an enumeration
type whose underlying type is not fixed before all its enumerators have been declared, to the parenthesized
name of such types, or to an lvalue that designates a bit-field. sizeof(char), sizeof(signed char) and
sizeof(unsigned char) are 1.
5.3.3/3
The sizeof operator can be applied to a pointer to a function, but shall not be applied directly to a function.
5.3.3/4
The lvalue-to-rvalue (4.1), array-to-pointer (4.2), and function-to-pointer (4.3) standard conversions are not
applied to the operand of sizeof.
Итого, стандартная конвертация из функции в указатель на функцию для sizeof не работает, потому ошибка

Ах... Ну все равно оставлю пояснение, а почему такое диагностическое сообщение - это уже дело VS, какое сообщение выдавать.
Но судя по доке - эта ошибка как раз для sizeof-а. http://msdn.microsoft.com/en-us/library/9adz64y0.aspx
2
SummerRain
327 / 326 / 92
Регистрация: 16.12.2012
Сообщений: 544
15.03.2013, 13:56 3
как это она не перегруженная, если принимает разные аргументы? (int, char, double)
1
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
15.03.2013, 14:00 4
Выдержка из стандарта:
The sizeof operator shall not be applied to an expression that has function or incomplete type, to an enumeration type whose underlying type is not fixed before all its enumerators have been declared, to the parenthesized name of such types, or to an lvalue that designates a bit-field.
P.S. Модератор раньше успел

Добавлено через 1 минуту
Цитата Сообщение от SummerRain Посмотреть сообщение
как это она не перегруженная, если принимает разные аргументы? (int, char, double)
Вы о чем сейчас?
1
Kuzia domovenok
2435 / 2142 / 523
Регистрация: 25.03.2012
Сообщений: 7,714
Записей в блоге: 1
15.03.2013, 14:01 5
Цитата Сообщение от SummerRain Посмотреть сообщение
как это она не перегруженная, если принимает разные аргументы? (int, char, double)
Так sizeof это и не функция, а (int, char, double) - не аргументы
1
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
15.03.2013, 14:09 6
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Так sizeof это и не функция, а (int, char, double) - не аргументы
С первым согласен - не функция, а оператор. Но вот int, char, double и прочее это как раз аргументы (ну или в оригинале operand).
1
Kuzia domovenok
2435 / 2142 / 523
Регистрация: 25.03.2012
Сообщений: 7,714
Записей в блоге: 1
15.03.2013, 14:13 7
Цитата Сообщение от Tulosba Посмотреть сообщение
аргументы (ну или в оригинале operand).
Это ты каким англо-русским словарём сейчас пользуешься, чтобы утверждать такое?
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
15.03.2013, 14:28 8
Kuzia domovenok, ну может быть ты мне тогда скажешь в чем отличие "аргумента" от "операнда" ?
0
ViktorKozlov
134 / 126 / 59
Регистрация: 13.12.2012
Сообщений: 293
15.03.2013, 17:43  [ТС] 9
Цитата Сообщение от ForEveR Посмотреть сообщение
эта ошибка как раз для sizeof-а. http://msdn.microsoft.com/en-us/library/9adz64y0.aspx
Ну да, перед двоеточием там ставится как раз тот тип, который не может принять sizeof. И если написать sizeof(*r), то в ошибке пишет уже непосредственно сам тип функции void (void), так как при разыменовании имя функции приводится к указателю и разыменовывается, т.е. вроде как тот же результат должен получиться. Только вот что за тип такой получается, "overloaded-function", если поставить просто имя, не совсем понятно
0
15.03.2013, 17:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2013, 17:43

Имя соглашения о вызове функции
Заметил, что имена соглашении о вызове функции можно писать разными...

sizeof
Подскажите пожалуйста что делаю не так? в базовом классе gameElement,...

sizeof()
Ребята,объясните пожалуйста для чего нужен sizeof()?А то в книге очень заумно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru