Current time: 14.04.2024, 12:36 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
С++, общая тема
Author Message
Efrit Offline
Administrators

Posts: 6183
Post: #331

Да я и не спорю. Просто случай того, что "какая-то переменная стала равна мусору", легко находится мониторингом всех переменных в отладчике - ведь программист, как правило, знает, значения из какого диапазона может принимать каждая его переменная. И всякие неадекватные значения (как правило, "мусорные" значения переменных очень большие) видны сразу.

С указателями же обнаружить подобную ошибку куда сложнее, поскольку их "мусорные" значения ничем на вид не отличаются от остальных - и там, и там какие-то адреса участков памяти в ОЗУ. Плюс, указатели, в отличие от переменных, можно попытаться разыменовать, что также может привести к ошибке...


Welcome to the soldier side,
Where there is no one here but me.
People all grow up to die,
There is no one here but me...
20.05.2012 12:19
Find all posts by this user Quote this message in a reply
gamecreator Offline

Posts: 7107
Post: #332

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


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
21.05.2012 23:28
Find all posts by this user Quote this message in a reply
Efrit Offline
Administrators

Posts: 6183
Post: #333

Не, далеко не всегда. В конструкторах классов, особенно если в них есть if или switch-ветки - так вообще никогда...


Welcome to the soldier side,
Where there is no one here but me.
People all grow up to die,
There is no one here but me...
22.05.2012 12:55
Find all posts by this user Quote this message in a reply
GrayFace Offline
Forum Moderators

Posts: 1233
Post: #334

Ну это всё-же проблема компилятора. Не инициализированная переменная должна вызывать warning. С переменными классов в Билдере тоже не должно быть проблем, т.к. TObject инициализирует всё нулями. Вот то, что в классическом с++ при создании объекта он заполнен мусором, мне тоже не нравится. // вообще, интересно, как Борланд "пришили" с++ к Дельфи - как поступили со строками, с виртуальными конструкторами, виртуальными функциями класса, class of...

(15.05.2012 02:53)gamecreator Wrote:  можно. но зачем? потеря двойной буферизации (а значит и жутко медленная отрисовка), стирание при следующем вызове отрисовки, еще что-нибудь вылезет. уже лучше вызвать перерисовку формы через invalidate.
Я на самом деле не знаю, какие там тонкости, просто сам пробовал так рисовать. Было бы интересно почитать детально.

(28.04.2012 19:03)Sav Wrote:  
totkotoriy Wrote:И ещё есть одна идейка насчет того глюка с не прорисовкой альфа канала на поле боя. Попробую в альфа плагин к хуку на прорисовку дефов существ вставить какое нибудь обновление экрана - может поможет.
Да не в этом там проблема. Проблема вообще элементарна - в определённых случаях элементы боя просто рисуются на своём месте несколько раз без стёрки предыдущего изображения. Без альфа-канала это незаметно, а в тех местах, где он или вообще какая-либо прозрачность присутствует после определённого числа наложений изображение, естественно, становится непрозрачным. Это не решается при помощи чёрной магии и не связано с отрисовкой def'ов.
Для двигающихся монстров я такую проблему решал - тень иногда по нескольку раз рисовалась без стирания.
Код для отрисовки с прозрачностью я могу оптимизировать как-нибудь на досуге.


Вся правда обо мне
24.05.2012 06:54
Find all posts by this user Quote this message in a reply
packa Offline

Posts: 1210
Post: #335

пишу от руки прогу на с++

Code:
int main(void)
{
}
return 0; нужно писать в конце? как вообще по стандарту? на егэ нужно...


подпись была удалена администрацией
просьба не использовать картинки с сайта heroeslibrary.net, так как на них ругается Chrome
26.05.2012 18:31
Find all posts by this user Quote this message in a reply
gamecreator Offline

Posts: 7107
Post: #336

конечно нужно. но многие компиляторы прощают это для main


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
26.05.2012 20:54
Find all posts by this user Quote this message in a reply
NIKr0m@nceR Offline

Posts: 203
Post: #337

нужно, я вообще мейн начинаю со слов
int main(void) {
    return 0;
}


всё на благо народа
26.05.2012 21:59
Find all posts by this user Quote this message in a reply
etoprostoya Offline

Posts: 1809
Post: #338

А я обычно так пишу:
void main()
{
}

И никаких вам ретурнов! Sm
27.05.2012 00:26
Find all posts by this user Quote this message in a reply
gamecreator Offline

Posts: 7107
Post: #339

зато int универсальнее


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
27.05.2012 00:32
Find all posts by this user Quote this message in a reply
NIKr0m@nceR Offline

Posts: 203
Post: #340

gcc обижается на попытки сделать main неинтовым


всё на благо народа
27.05.2012 08:36
Find all posts by this user Quote this message in a reply
Efrit Offline
Administrators

Posts: 6183
Post: #341

packa, по стандарту можно return в конце main не ставить. Его отсутствие эквивалентно return 0. Причём это верно только для main, с другими функциями так не прокатит.


Welcome to the soldier side,
Where there is no one here but me.
People all grow up to die,
There is no one here but me...
27.05.2012 10:45
Find all posts by this user Quote this message in a reply
GreyGhost Offline

Posts: 178
Post: #342

если main объявлена как int то return быть обязан.

просто во многих компиляторах есть заглушка
int main(...)
{
(void)main(...)
return 0;
}

все процессы ОБЯЗАНЫ возвращать ОС статус завершения.
29.05.2012 16:07
Visit this user's website Find all posts by this user Quote this message in a reply
packa Offline

Posts: 1210
Post: #343

Может мой вопрос прозвучит глупо, но существуют компиляторы под Симбион S60 ?
Вот новый телефон нокия 6120) хотелось бы везде иметь возможность кодить)


подпись была удалена администрацией
просьба не использовать картинки с сайта heroeslibrary.net, так как на них ругается Chrome
01.06.2012 21:09
Find all posts by this user Quote this message in a reply
Efrit Offline
Administrators

Posts: 6183
Post: #344

В стандартный состав библиотеки Qt входит порт под Simbian, так что ответ - да.


Welcome to the soldier side,
Where there is no one here but me.
People all grow up to die,
There is no one here but me...
01.06.2012 22:02
Find all posts by this user Quote this message in a reply
Efrit Offline
Administrators

Posts: 6183
Post: #345

Вопрос от меня. Можно ли хоть как-нибудь передать среди параметров шаблона тип класса, в котором и идёт эта "передача"?
Понимаю, что сформулировал коряво, поэтому покажу код:

PHP Code:
template <typename T>
class 
Sub
{
};
//-------------------

class Temp
{
    
Sub<ints1;
    
Sub<Temps2;
}; 

Этот код отлично скомпилируется и будет работать. Но, допустим, я решил переименовать класс Temp в MyFavoriteClass - а это означает, что и тип переменной s2 придётся переименовать...

В C++11 есть удобная штука decltype(X), которая определяет тип X ещё на этапе компиляции. Естественно, что я попробовал сначала написать decltype(*this) - но, увы, "invalid use of 'this' at top level". А вот если написать такую строку внутри какого-то метода Temp, то всё будет работать, поскольку this уже будет существовать...

Вот и как быть? Как мне сказать компилятору, что я хочу передать именно текущий класс Temp как параметр шаблона?


Welcome to the soldier side,
Where there is no one here but me.
People all grow up to die,
There is no one here but me...
19.06.2012 13:37
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group