![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Тьфу, это я уже запутался... char * p=new (buf)char[120] Эта конструкция ничего не нарушает. Мы приводим указатель на char к указателю на char - так как buf в чистом виде является именно этим. В языке Си имя массива без скобок является указателем на начало массива. так что char *b char bb[10] b и bb эквивалентны. |
|||
|
||||
| ip127001 |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 24.11.2006 Где: Omsk Репутация: -2 Всего: -1 |
это все ясно....но не потеме..
не говори сам в шоке.. там кто-то говорил что на VC ошибка при компиляции возникает см. пост 1 так на BC++ 6 голяк...даже не заикнулся хорошо я так для прикола решил проверить...теперь буду внимательно_ОЧЕНЬ_этим пользоваться... а то в проге лям такой допустишь, и до нового года искать ошибку будешь... --------------------
aqua currit et debere currere ut currere solebat |
||||
|
|||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
ничего мы не приводим эта конструкция placement new называется с чего это вдруг? это разные типы и никакой эквиваленции быть не может другое дело, что компилятор неявно прииводит char[] к char* в некоторых случаях -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Anikmar |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Может я неправильно выразился. Имя массива является указателем. Некоторое исключение составляет явное определение размера массива. Запись такого вида:
Нормально откомпилируется и будет работать без всяких вопросов. |
||||
|
|||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
||||
|
||||
| SerpentVV |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 27.11.2006 Где: Астрахань Репутация: 1 Всего: 1 |
1. Имя массива является конст антным указателем - этог только в С было... В С++ имя массива приводится к указателю в некоторых случаях... 2. Не советую использовать такие конструкции... Там не хватает как минимум new
Иначе можно нарваться... |
|||
|
||||
| Anikmar |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Я специально поставил многоточие. Выделение памяти может осущестляться различными методами, совершенно необязательно оператором new (оставим правильность такого подхода с точки зрения общепринятых и рекомендуемых методов). Я именно про конструкцию:
Про константный я и не спорил, я говорил про использование имени массива. Использовать имя массива как указатель допустимо и никаких ошибок не вызовет. |
||||
|
|||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Anikmar, сорри в апострофах, конечно - писал быстро, ошибся чуток.
|
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
||||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
Любитель, в 2003 вылетает и в release и в Debug
никаких тут как надо!! это константа, ее нельзя менять, так что билдер плохо сработал.. |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
vinter, почему константа? если написать const char *p = "ку-ку"; тогда константа...
Ща для интереса гляну в стандарт. Добавлено @ 00:36 Может плохо смотрел, но в черновике стандарта ни слова не нашел про константу.... |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
стандарт в глаза не видел
но верю Струструпу char *p = "111"; , и const char *p = "111"; одно и тоже |
|||
|
||||
| nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
Сам техт "!!!" - это константа (присваивается же только указатель), она хранится где-то в памяти, и при попытке изменить её скорее всего программа вылетит. -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
| Anikmar |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Да почему? Объясните, мне, дураку? Во многих старых учебниках по Си давалось предупреждение: "С осторожностью изменяйте текстовые строки - при установке опции компилятора "соединять одинаковые строки" вы можете получить нежелательные результаты" То, что так делать не надо - я даже спорить не буду, но то, что стандарт это не запрещает - это факт.
Это сообщение отредактировал(а) Anikmar - 9.2.2007, 01:19 |
||||
|
|||||
| nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
Теоретически константы можно изменять, это всего лишь фича языка, да и в стандарте имхо точно не описано что будет если изменить константу через каст или указатель.
Но, каждый компилятор реализует и оптимирует их по-разному (может например расположить их где-нибудь в памяти, куда нет доступа на запись), так что результат зависит от фазы луны, положения звёзд и некоторых других общеизвестных факторов. -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |