|
|
|
Массив ссылок
|
|||
|---|---|---|---|
|
#18+
А что, у нас сабж создавать что ли нельзя? Код: plaintext 1. 2. 3. автор c.cpp: In function `int main()': c.cpp:41: error: declaration of `c' as array of references c.cpp:41: error: assignment (not initialization) in declaration c.cpp:42: error: declaration of `d' as array of references ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2007, 16:48:31 |
|
||
|
Массив ссылок
|
|||
|---|---|---|---|
|
#18+
Akh пишет: > А что, у нас сабж создавать что ли нельзя? Нельзя. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2007, 18:09:22 |
|
||
|
Массив ссылок
|
|||
|---|---|---|---|
|
#18+
MasterZivНельзя. А чего так плохо? Есть этому объеснения? Для указателей же можно. В чем здесь различие? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2007, 18:25:13 |
|
||
|
Массив ссылок
|
|||
|---|---|---|---|
|
#18+
i:\Learn\test\test.cpp(68): error C2440: 'initializing' : cannot convert from 'int' to 'int *' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast у меня так ругается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2007, 18:34:23 |
|
||
|
Массив ссылок
|
|||
|---|---|---|---|
|
#18+
может элемент массива не может выступать псевдонимом переменной? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2007, 18:36:08 |
|
||
|
Массив ссылок
|
|||
|---|---|---|---|
|
#18+
Tubrikможет элемент массива не может выступать псевдонимом переменной? Тынца может, а сцылки нет? Интересно почему... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2007, 09:41:15 |
|
||
|
Массив ссылок
|
|||
|---|---|---|---|
|
#18+
Вообщем в стандарте нашел по этому поводу только 8.3.4/2, где сцылки не указаны. Почему, - остается только догадываться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2007, 09:48:22 |
|
||
|
Массив ссылок
|
|||
|---|---|---|---|
|
#18+
Akh Tubrikможет элемент массива не может выступать псевдонимом переменной? Тынца может, а сцылки нет? Интересно почему... Имя массива - это адрес памяти, начиная с которого могут располагаться данные? Псевдоним переменной может быть представлен в виде данных? Т.е. сколько байт нужно, чтобы хранить псевдоним? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2007, 09:49:20 |
|
||
|
Массив ссылок
|
|||
|---|---|---|---|
|
#18+
Т.е. я что хотел узнать, если псевдоним - это просто другое имя, то выходит int &d[2]; - это массив имен (не данных!), а имя это просто ассоциация с ячейкой памяти, как сделать массив этих ассоциаций? Код: plaintext 1. 2. хотя может просто не стали усложнять себе жизнь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2007, 09:58:55 |
|
||
|
Массив ссылок
|
|||
|---|---|---|---|
|
#18+
Tubrik Akh Tubrikможет элемент массива не может выступать псевдонимом переменной? Тынца может, а сцылки нет? Интересно почему... Имя массива - это адрес памяти, начиная с которого могут располагаться данные? Псевдоним переменной может быть представлен в виде данных? Т.е. сколько байт нужно, чтобы хранить псевдоним? Интересное суждение. Допустим sizeof(Type&)==sizeof(Type*). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2007, 09:59:47 |
|
||
|
Массив ссылок
|
|||
|---|---|---|---|
|
#18+
Akh Tubrik Akh Tubrikможет элемент массива не может выступать псевдонимом переменной? Тынца может, а сцылки нет? Интересно почему... Имя массива - это адрес памяти, начиная с которого могут располагаться данные? Псевдоним переменной может быть представлен в виде данных? Т.е. сколько байт нужно, чтобы хранить псевдоним? Интересное суждение. Допустим sizeof(Type&)==sizeof(Type*). Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2007, 10:05:21 |
|
||
|
Массив ссылок
|
|||
|---|---|---|---|
|
#18+
Tubrik[quot Akh] Код: plaintext 1. Если ты заметил выше я указал: "допустим"! Ссылка хитрая штука. Она не является самим объектом, а лишь информирует о его месторасположении. В случае с массивами ее можно выродить в указатели. Допустим у тебя есть следующий код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. что будет из себя представлять ссылка в функции? Указатель. Потомучто, в функции оператор присваивания не может знать место, куда ему положить значение, ибо оно разное. Возможно sizeof(Type&)==sizeof(Type) - не является удачным решением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2007, 10:16:24 |
|
||
|
Массив ссылок
|
|||
|---|---|---|---|
|
#18+
выходит ссылка - это совсем не тип данных, раз она интерпретируется по-разному в разных случаях, а раз это не тип данных, то может именно поэтому нельзя создать массив ссылок? Где-нибудь оговаривается как должен реализовываться ссылочный механизм в компиляторе? Если нет, то могут же в другой версии сделать другую реализацию ссылок? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2007, 10:40:08 |
|
||
|
Массив ссылок
|
|||
|---|---|---|---|
|
#18+
Tubrikвыходит ссылка - это совсем не тип данных, раз она интерпретируется по-разному в разных случаях, а раз это не тип данных, то может именно поэтому нельзя создать массив ссылок? Да, поэтому. TubrikГде-нибудь оговаривается как должен реализовываться ссылочный механизм в компиляторе? Конкретная реализация, думаю что нет. Но оговариваются свойства ссылок. Tubrik Если нет, то могут же в другой версии сделать другую реализацию ссылок? Могут, но свойства должны оставаться соотвествующими стандарту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2007, 10:52:49 |
|
||
|
Массив ссылок
|
|||
|---|---|---|---|
|
#18+
Akh пишет: Я все же думаю, что нельзя по причине того, что массив не обязательно гарантирует инициализированности всех его элементов. А ссылки должны быть обязательно инициализированы. К тому же , для инициализации массива нужен static initializer, а адрес переменной, используемый для инициализации ссылок, не может быть таким. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2007, 18:03:31 |
|
||
|
Массив ссылок
|
|||
|---|---|---|---|
|
#18+
MasterZiv Akh пишет: Я все же думаю, что нельзя по причине того, что массив не обязательно гарантирует инициализированности всех его элементов. А ссылки должны быть обязательно инициализированы. К тому же , для инициализации массива нужен static initializer, а адрес переменной, используемый для инициализации ссылок, не может быть таким. Posted via ActualForum NNTP Server 1.4 1. Массив использует инициализацию по умолчнию, как и простая переменная. Если инициализация по умолчанию отсутвует, то необходима явная инициализация. Пример класс TClass::TClass(int i). Конструктора по умолчанию нет, создать элемент можно только указав явный вызов конструктора. Ссылка, аналогично, (если представить, что ей разрешили стать объектом) не имеет конструтора по умолчанию. Поэтому массив будет гарантировать инициализацию всех элементов, как и для объектов класса без конструктора по умолчанию. 2. Я не знаю, что такое статический инициализатор (static initializer). В стандарте такого словосочетания не нашел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2007, 18:23:55 |
|
||
|
Массив ссылок
|
|||
|---|---|---|---|
|
#18+
Akh MasterZiv Akh пишет: Я все же думаю, что нельзя по причине того, что массив не обязательно гарантирует инициализированности всех его элементов. А ссылки должны быть обязательно инициализированы. К тому же , для инициализации массива нужен static initializer, а адрес переменной, используемый для инициализации ссылок, не может быть таким. Posted via ActualForum NNTP Server 1.4 1. Массив использует инициализацию по умолчнию, как и простая переменная. Если инициализация по умолчанию отсутвует, то необходима явная инициализация. Пример класс TClass::TClass(int i). Конструктора по умолчанию нет, создать элемент можно только указав явный вызов конструктора. Ссылка, аналогично, (если представить, что ей разрешили стать объектом) не имеет конструтора по умолчанию. Поэтому массив будет гарантировать инициализацию всех элементов, как и для объектов класса без конструктора по умолчанию. 2. Я не знаю, что такое статический инициализатор (static initializer). В стандарте такого словосочетания не нашел. Под статической инициализацией понимают инициализацию на этапе компиляции, то есть уже на этапе компиляции должны быть известны значения помещаемые в массив. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2007, 20:26:19 |
|
||
|
Массив ссылок
|
|||
|---|---|---|---|
|
#18+
Вроде как объяснения есть в ARM'e ($8.4.3) - нельзя, потому что запрещены указатели на ссылки, значит, для такого массива будет недопустима операция *(a+i). Но самого ARM'a не нашёл, нашёл только ссылки на него... Комментарии в исходниках gcc, которым, по-видимому, Akh и компилировал свой пример: http://gcc.gnu.org/ml/gcc-patches/1999-11/msg00421.html /* ARM $8.4.3: Since you can't have a pointer to a reference, you can't have arrays of references. If we allowed them, then we'd be saying x is valid for an array x, but then you'd have to ask: what does `*(x + i)' mean? */ if (TREE_CODE (type) == REFERENCE_TYPE) { if (decl_context == TYPENAME) cp_error ("cannot make arrays of references"); else cp_error ("declaration of `%D' as array of references", dname); type = error_mark_node; } Ещё одна ссылка на тот же 8.4.3: http://www.pa.msu.edu/courses/1996spring/PHY405/lect4.html there are no arrays of references double x, y, z; double &v[3] = {x,y,z}; // illegal - no arrays of references The reason (given in the Annotated Reference Manual,[[section]]8.4.3) is that by the equivalence of the subscripting operator and dereferencing (a is *(a+i)). So in the last example, v[0]==*(v+0), which means that v would have to be a "double &*", which we've already disallowed. Тут http://www.stanford.edu/class/cs193d/handouts/19-midterm_solution.pdf ещё один вариант (на 10-й странице). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2007, 00:04:54 |
|
||
|
Массив ссылок
|
|||
|---|---|---|---|
|
#18+
Akh пишет: > 1. Массив использует инициализацию по умолчнию, как и простая > переменная. Если инициализация по умолчанию отсутвует, то необходима > явная инициализация. Пример класс TClass::TClass(int i). Конструктора по А при чем здесь инициализация по умолчанию ? Ссылка не может быть инициализирована по умолчанию, неявно. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2007, 22:06:39 |
|
||
|
Массив ссылок
|
|||
|---|---|---|---|
|
#18+
Ладно, всем спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2007, 09:54:03 |
|
||
|
Массив ссылок
|
|||
|---|---|---|---|
|
#18+
ссылки ж вроде были созданы для передачи параметров в функции, а не для того, чтобы их вместо указателей использовать где попало. узать указатели 2х аффтопитезь: 4 8 15 16 23 42 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2007, 12:54:47 |
|
||
|
Массив ссылок
|
|||
|---|---|---|---|
|
#18+
Aklinссылки ж вроде были созданы для передачи параметров в функции, а не для того, чтобы их вместо указателей использовать где попало. узать указатели 2х аффтопитезь: 4 8 15 16 23 42 Я, вообще-то считал, что ссылки созданы, как всегда инициализированные указатели. Как выразился Тубрик "псевдонимы". А уж где они используются - в параметрах функции, как свойство класса, это уже конкретные области применения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2007, 13:51:04 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34733624&tid=2028341]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
194ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 532ms |

| 0 / 0 |
