|
|
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
Сорри, если баян. В классе есть Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 13:08 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
ЛюкСкайУокерСорри, если баян. В классе есть Код: plaintext 1. Статиком возможно задать? И вообще, ты что хочешь сдалать? указатель на массив чаров? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 13:20 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
Я думаю что так: Constructor(...) : Array(ptr) { ... } По другому никак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 13:29 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
ЛюкСкайУокер пишет: > const char * const Array[ARRAY_SIZE]; > > Как его инициализировать? Раз константное поле, значит список > инициализации, но массивы он не хавает. Тогда как? В конструкторе, в списке инициализации. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 13:47 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
blinded, MasterZiv: интересные у вас ответы. :) Автор написал, что у него так не получается, а вы ему говорите, "делай, мол, получится". Имхо, раз у него не получается, товарищ хочет: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 13:55 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
А что за проблема? Мы указатель в конструктор передать не могем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 14:04 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
blindedА что за проблема? Мы указатель в конструктор передать не могем? Он хочет массив схавать. По логике вещей, он хочет инициализировать массив указателей. Я так понял из: ЛюкСкайУокер ... Как его инициализировать? Раз константное поле, значит список инициализации, но массивы он не хавает. Тогда как? Т.е. он ошибся в определении типа переменной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 14:09 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
Ничего не понимаю, хотел проинициализировать константный указатель на константную строку - получите, какие массивы. Пусть сам появится и даст кусок кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 14:15 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
Так, что-то разьрос понятий:) const char * const Array[ARRAY_SIZE]; - это массив константных указателей на константные строки (хотя мог быть и любой другой тип, не char). Ну пусть так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 1. Перечислить в круглых скобках строки мы не можем (синтаксис не позволяет это). 2. В списке инициализации перечислять Array[0] ("Text0"), Array[1]("Text1") - тоже синтаксически нельзя... Подбросить в скобках другой аналогичный массив, только не-const? Громозко, да и где его взять. Да, если оформить static-ом будет проще, интересно понять: неужели С++ не позволяет объявить в классе массив константных указателей?! (ясно, что убрав const перед Array в объявлении, проблема решится легко. Ну а если не убирать!) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 14:54 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
Странное желание. А ежеди так попробовать? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 15:11 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
Почему всем это кажется странным желанием? :) Неужели не может возникнуть потребность в массиве строк, который не должен модифицироваться? А насчет последнего предложенного способа... компилится? студии под рукой нет просто.. Наверно и так можно, но странно, что нет прямого способа, без вспомогательного массива. Если мы в namespace его объявили, то в составе класса аналогичный ему в принципе-то уже не нужен:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 15:25 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
ЛюкСкайУокерТак, что-то разьрос понятий:) const char * const Array[ARRAY_SIZE]; - это массив константных указателей на константные строки (хотя мог быть и любой другой тип, не char). имхо, это константный указатель на константный массив из элементов char. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 15:26 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
А если это решить через оболочку? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 15:36 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
Akh пишет: > const char * const Array[ARRAY_SIZE]; - это массив константных > указателей на константные строки (хотя мог быть и любой другой тип, не > char). > имхо, это константный указатель на константный массив из элементов char. Не, именно так, как написал blinded. Можно еще его в конструкторе поэлементно присвоить. В теле. На самом деле не понятно, зачем константный нестатический массив в экземпляре объекта класса. И зачем по значению. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 15:39 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
MasterZiv Akh пишет: > const char * const Array[ARRAY_SIZE]; - это массив константных > указателей на константные строки (хотя мог быть и любой другой тип, не > char). > имхо, это константный указатель на константный массив из элементов char. Не, именно так, как написал blinded. Можно еще его в конструкторе поэлементно присвоить. В теле. На самом деле не понятно, зачем константный нестатический массив в экземпляре объекта класса. И зачем по значению. Posted via ActualForum NNTP Server 1.4 1. Согласен. Специально проверил. [] приоритетней 2. Нельзя. Указатели константны. 3. Возможно от объекта к объекту данные должны различаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 16:01 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
ЛюкСкайУокерПочему всем это кажется странным желанием? :) Неужели не может возникнуть потребность в массиве строк, который не должен модифицироваться? .......................... Я считаю что потребность в таком массиве возникнуть не может. Не понимаю зачем может понадобиться копия неизменяемого массива для каждого объекта класса? Массив надо просто сделать статическим членом класса и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 17:22 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
да, косяк, студия прямо говорит: «не могу явно инициализировать массивы» ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 17:38 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
Sandro_KНе понимаю зачем может понадобиться копия неизменяемого массива для каждого объекта класса? Массив надо просто сделать статическим членом класса и все.почему копия? Просто неизменяемый массив. Неизменяемым его делают очевидно затем, чтобы его далее нельзя было изменить. Статик не подходит ежу сказали, почему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 17:40 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
Akh пишет: > 3. Возможно от объекта к объекту данные должны различаться. А вот это верно - не подумал. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 17:42 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
maXmo пишет: > почему копия? Просто неизменяемый массив. Неизменяемым его делают > очевидно затем, чтобы его далее нельзя было изменить. Статик не подходит > ежу сказали, почему. Но вообще согласен. Можно в объектах сделать ссылки, и их ссылать на что-то статическое. Которое уже инициализировать. А вообще, может автор топика поделится, зачем ему такое нужно ? В чем реальная потребность ? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 17:44 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
странно, сделал так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 18:04 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
Ни хрена мы не знаем. Вот g++ четко сказал ISO C++ forbids assigment of array Так что нечего выеживаться, надо делать на все const char* const* Array; не не совсем эквивалентно, зато инициализируется без проблем Хошь так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 18:52 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
Со втроенными массивами эта штука не выйдет, а вот написать что-то, что вело бы себя как втроенные массивы можно: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 20:43 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
ЛюкСкайУокерСорри, если баян. В классе есть Код: plaintext 1. Никак. М. Эллис, Б. Строуструп "Справочное руководство по языку программирования С++ с комментариями", Москва "МИР" 1992, стр. 289, цитата: "Нет, ..., синтаксиса для инициализации члена, являющегося нестатическим константным массивом." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2007, 05:29 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
Если честно, в моем случае потребности в не-static нет (класс все равно singleton:)) Стало интересно, не ожидал что С++ не поддерживает такой синтаксис. Наверно если понадобится в каждом экземпляре свой массив указателей, который не должен модифицироваться, то проще наваять класс массива и агрегировать указатель на константный объект этого класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2007, 07:23 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
blindedISO C++ forbids assigment of arrayну про присвоение никто и не говорил, хотели инициализацию. Вот кстати ещё цитатка manIf the entity is of const-qualified type or reference type, or of a (possibly cv-qualified) POD class type (or array thereof) containing (directly or indirectly) a member of a const-qualified type, the program is ill-formed. Интересно, зачем сделали разную семантику инициализации полей объектов и обычных переменных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2007, 11:57 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
ЛюкСкайУокерЕсли честно, в моем случае потребности в не-static нет (класс все равно singleton:)) Стало интересно, не ожидал что С++ не поддерживает такой синтаксис. Наверно если понадобится в каждом экземпляре свой массив указателей, который не должен модифицироваться, то проще наваять класс массива и агрегировать указатель на константный объект этого класса. Проще - не трогать то, что нельзя! (шутка). Вообще Строуструп очень часто повторяет одну мысль (в разных вариантах и по разным поводам) суть которой следующая: при разработке языка С++ исключались те черты, которые могли бы повлечь дополнительные расходы памяти или времени выполнения. И если посмотреть на машинный код после компиляции, то действительно нет ничего лишнего, всё компактно и просто. Я имею в виду компиляторы классического С++, а не всяческие современные IDE, Studio и т. п. Вот ещё пара цитат из него: "Язык С++ не пытается ни обеспечить максимально развитого управления защитой, ни поддержать все мыслимые механизмы для выражения всевозможной защиты. Такие средства сделали бы язык гораздо более сложным, нежели это есть сейчас, а он и так обеспечивает весьма высокий уровень выразительности." "Механизмы управления доступом в С++ обеспечивают защиту от случайного, а НЕ от преднамеренного доступа. ... Эти возможности относятся к проблемам окружения и дисциплины программирования, но НЕ к проблемам языка." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2007, 12:03 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
maXmoИнтересно, зачем сделали разную семантику инициализации полей объектов и обычных переменных. Да просто захотелось :-) Б. Строуструп цитата: Запись =выражение наиболее естественна при инициализации простых переменных, особенно - переменных арифметического типа и указателей. Запись {список-инициализаций} хорошо служит при инициализации массивов и структур данных. Запись (список-выражений) кажется наиболее подходящей при создании объекта некоторого типа, который не подходит под стандарты для арифметических типов. конец цитаты. Кстати для обычных переменных допустимы все виды присваиваний: int i = 5; int i = {5}; int i (5); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2007, 12:43 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
Наверно "истинно правильно" даже так: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2007, 14:05 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
ну вообще-то истинно праильно так int i(5); все остальное компилер неявно приведет к этому виду ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2007, 14:38 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
ЛюкСкайУокер пишет: > синтаксис. Наверно если понадобится в каждом экземпляре свой массив > указателей, который не должен модифицироваться, то проще наваять класс > массива и агрегировать указатель на константный объект этого класса. Да можно нестатический УКАЗАТЕЛЬ на массив иметь. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2007, 17:14 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
ЛюкСкайУокерНаверно "истинно правильно" даже так: Код: plaintext 1. Начало этого топика заставило меня разбудить мои мозги, уже много лет купающиеся в удобной среде визуальной разработки, где нет и намёка на появление таких крамольных мыслей (это я всё про первый пост). Но вот этот пост... как бы это помягче... Неужели учебника даже не читали? А начало было интересное... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2007, 17:16 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
Всего не упомнишь.. я знаю много профессиональных программистов, которые с ходу не скажут что такое explicit, volatile или mutable, и прекрасно при этом живут) А в случае Код: plaintext 1. Код: plaintext 1. Ну а первая запись - передача параметров конструктору... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2007, 06:48 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
ЛюкСкайУокерВсего не упомнишь.. я знаю много профессиональных программистов, которые с ходу не скажут что такое explicit, volatile или mutable, и прекрасно при этом живут)Согласен. Не хотел обидеть. ЛюкСкайУокерА в случае Код: plaintext 1. Код: plaintext 1. Ну а первая запись - передача параметров конструктору...Да конечно же первая запись имеет право быть написана и поймётся компилятором. Только получилось "масло масляное". Сначала создаём объект типа int, инициализированный значением 5, и его присваиваем int'у x. Вместо того, чтобы сразу создать объект x типа int, инициализированный значением 5. Код: plaintext И всё-таки, уважаемый ЛюкСкайУокер , скажите (если не секрет) зачем понадобилось Код: plaintext 1. 2. Прямо маниакальная боязнь потерять или затереть эти строки... Опять-таки не обижайтесь! :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2007, 08:50 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
Ну что вы, без обид) Я уже писал, что мне понадобилась конструкция без константности указателей, а константность строк - действительно для защиты от модификации. Покольку класс по паттерну синглетон, потом я вообще так сделал: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2007, 10:01 |
|
||
|
Вопрос синтаксиса
|
|||
|---|---|---|---|
|
#18+
LisFox ЛюкСкайУокер Код: plaintext 1. Только получилось "масло масляное". Сначала создаём объект типа int, инициализированный значением 5, и его присваиваем int'у x. Вместо того, чтобы сразу создать объект x типа int, инициализированный значением 5. Код: plaintext Не совсем верно. Не буду искать источник (это есть в стандарте и в книгах Мейерса), напишу сразу по сути... При определении объекта в месте объявления насколько мне известно НИКОГДА не вызыватся оператор присваивания или конструктор копирования. e.g. int x = int(5); или int x (5); или int x = 5; АБСОЛЮТНО одно и тоже ( за небольшим исключением в случае наличия explicit конструктора ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2007, 00:21 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2028454]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
200ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
88ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 566ms |

| 0 / 0 |
