Другие языки программирования и технологии

Про С++ .Не получается явное преобразование типов. Помогите разобраться. Код внутри.

void __fastcall TForm1::Button1Click(TObject *Sender) { short rr = 77; Edit1 -> Text= sizeof rr ; (long) rr; Edit2 -> Text= sizeof rr ; }
В принципе присваивание Edit2 -> Text= sizeof rr впоне корректно.

надо так
short rr = 77;
Edit1 -> Text= sizeof rr ;

Edit2 -> Text= sizeof ((long) rr);
Никита Чуркин
Никита Чуркин
2 619
Лучший ответ
Здесь некто под именем Максим петренко написал глупость, что якобы переменная после оператора sizeof должна быть в скобках. Ничего подобного! В скобки нужно заключать только операнд, который является не именем объекта, а его типом. Например,

short rr;

sizeof( short );

но

sizeof rr;

Что касается исходного кода, то значением оператора sizeof является тип size_t, то есть беззнаковое целое. Вы его присваиваете объекту

Edit1 -> Text

А какой тип у этого объекта? ! Можно ли целое число присваивать этому объекту? Именно в этом у вас скорее всего заключается ошибка!

Кстати сказать, я сразу не обратил внимание, но этот код

(long) rr;
Edit2 -> Text= sizeof rr ;

вообще является глупостью. То, что вы написали выражение

(long) rr;

никак не влияет на результат выражения

Edit2 -> Text= sizeof rr

потому что как rr у вас ьыло объявлено как short так оно таким и осталось, а потому его размер остался равным 2 байтам для 32-битовых машин.

Вы проверьтте, какой у вас тип у Edit2 -> Text и можно ли ему присваивать целое число!
Алексей Попов
Алексей Попов
79 586
sizeof возвращает длину переменной в байтах (целочисленный тип) , а Text имеет целочисленный тип? И пока не видно и явного преобразования!

вот правильно слушайся Сыроежку! :)
Ебаный стыд

Edit1 -> Text= AnsiString(rr);
Это же vcl, я прав?
Сыроежка Меню пользователя на ответах Оракул (76776)1 час назад (ссылка)
Нарушение! Нарушение! Подарить стикер! NEW
Здесь некто под именем Максим петренко написал глупость, что якобы переменная после оператора sizeof должна быть в скобках. Ничего подобного! В скобки нужно заключать только операнд, который является не именем объекта, а его типом.

в чем глупость?
вот у тебя явно глупость

"В скобки нужно заключать только операнд, который является не именем объекта, а его типом"

sizeof(int)
sizeof(x)

это однохуйственно
idsr10
idsr10
2 179
переменная после сайзоф по сути должна быть в скобках