Closed TopicStart new topicStart Poll

Страницы: (3) 1 2 3 
niktuba
дата: [ i ]
  • *
  • Профессионал
  • Репутация: 118
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
(S)-Народ!
Есть ли в Visual С++ 6.0 функция типа LineTo, которая позволяла бы рисовать линию только в пределах известного прямоугольника - например заданной области построения линейного графика?
Заранее спасибо за любые комментарии.

C++ sexnarod journal ;)

Это сообщение отредактировал niktuba - 07-09-2006 - 15:36
дата: [ i ]
  • Unregistered
  • Статус:
  • Свободен
Follow the CreateRectRgn & SelectClipRgn wink.gif. Прямых функций нет.
tetro
дата: [ i ]
  • *
  • Специалист
  • Репутация: 15
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
Наконец-то, на работе, начали переход на 2005 студию.
И тут такой вопрос.
Есть функция, скажем:
CODE
void lala(const double * &p) {....}

Передается ей референс на массив (например чтобы можно было его удалить)

Есть 2 массива:

CODE

double *pD;
const double *pCD;


Раньше (в 2003) оба варианта
CODE

lala(pD);
lala(pCD);


Были законны, а теперь только второй. 2005 требует наличия функции:
CODE
void lala(double * &p) {....}


Об'ясните, чем это стандарту не нравится? (или это МС глюки?)
guest_from_the_past
дата: [ i ]
  • *
  • Новичок
  • Репутация: нет
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
QUOTE (tetro @ 10.09.2006 - время: 14:12)
Наконец-то, на работе, начали переход на 2005 студию.
И тут такой вопрос.

2005 студия абсолютна корректна. Если по-простому: стандарт запрещает сохранять (или передавать в функцию) ссылки на неконстантные временные объекты.
Т.е. (простой пример)
CODE

int& p = int(); // ошибка
const& p = int(); // правильно


2003 студия на этом примере отработает правильно, у нее глюк только со ссылками на указатель, но смысл уловить можно.

Откуда берется временный объект? Все просто. Поскольку функция lala у тебя одна, и только для const double*, компилятор перебирая возможные варианты преобразований создает временный объект const double* на основе double* и подставляет его в функцию. Повторю, подставляет _временный_объект_. А дальше облом - ссылку то ты получаешь неконстантную.
Добавив const перед ссылкой, можно решить проблему преобразований:
CODE
void lala(const double * const&p) {....}

Но боюсь это не то, что тебе надо. Ибо исчезнет возможность изменения значения указателя. Собственно для этого ты его и передавал по ссылке.

Воспользуйся введением дополнительной функции:
CODE
void lala(const double*& p) { p = 0; /*  к примеру */ }
void lala(double*& p) { const double* tmp_p = p; lala(tmp_p); p = const_cast<double*>(tmp_p); }

Либо особенность оптимизации, которая потом выкидывает временный объект, что позволяет поступить так: (не очень хорошо)
CODE
void lala(const double* const& p) { const double*& p1 = const_cast<const double*&>(p);  p1 = 0; }

const_cast здесь совершенно корректен.

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

PPS. на вопросы телезрителей исключительно из уважения к tetro отвечал GregZ, спасибо за внимание

Это сообщение отредактировал guest_from_the_past - 12-09-2006 - 01:02
tetro
дата: [ i ]
  • *
  • Специалист
  • Репутация: 15
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
Отвечу здесь...
О существовании там временного объекта я не подумал.
А случай (в реальности, не кристалиизированый) - это деаллокаторы (облочки для delete, чтобы корректно удалять 1, 2, 3 и т.д. массивы).

Других осмысленных использований этого метода, без организации минного поля в коде я и сам не вижу.
-=PushPull=-
дата: [ i ]
  • *
  • Новичок
  • Репутация: нет
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
GregZ, чего с указателями решили, и почему? аналогичный выбор надо сделать...

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

Это сообщение отредактировал -=PushPull=- - 09-12-2006 - 13:56
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)

Страницы: (3) 1 2 3

Closed TopicStart new topicStart Poll0


Рекомендуем почитать также топики:

"Звонилки"

нужна помощь

Euro Truck Simulator

Сертифицирование приложений o.s symbian 9.1

Ваш лимит для пополнения счета



>