- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
#include <iostream>
int main()
{
int a[4] = {1,2,3,4};
int (&b)[4] = a;
int c[4] = {5,6,7,8};
a=c;
std::cout<<b[0];
}
prog.cpp: In function ‘int main()’:
prog.cpp:8: error: invalid array assignment
Dummy00001 08.10.2011 17:21 # +2
хотя маразмы геймдева начинают доставать потиху.
ЗЫ std::vector специально для этих целей существует.
gegMOPO4 08.10.2011 17:50 # +3
TarasB 08.10.2011 18:24 # −5
Dummy00001 08.10.2011 18:28 # +2
т.е. типа синтакс пролистал и уже готов как специалист?
это ж даже в страуструпе написано: std::vector есть крестовый массив.
TarasB 08.10.2011 18:34 # −7
Govnoeb 08.10.2011 19:03 # +3
да? даже для случая, когда размер массива известен заранее и не будет меняться?
Dummy00001 08.10.2011 19:48 # −2
[code=cpp]
struct blablabla {
int data[4];
};
[code]
TarasB 08.10.2011 20:03 # −6
АХРЕНЕТЬ
И не надо тыкать в незнание стандарта. Если в стандарте написано, что говно воняет, то оно от этого не перестанет вонять.
SmackMyBitchUp 08.10.2011 20:08 # 0
guest 08.10.2011 20:10 # 0
TarasB 08.10.2011 20:12 # −5
Короче, я хуею с кривости этого "ублюдочного недоязычка" (эпитет не мой).
А ещё если в функцию передать int[4], то передастся указатель, а если структуру, то весь массив скопируется на стек.
SmackMyBitchUp 08.10.2011 21:41 # 0
Dummy00001 08.10.2011 20:17 # +2
для обратной совместимости с С, в С++ массив работает аналогично.
для С++ приложений, есть кучи классов контейнеров, в которых само собой разумется присваивание определено.
TarasB 08.10.2011 20:55 # −7
carsten 12.10.2011 09:44 # +4
TarasB 12.10.2011 13:14 # −3
ЛУчше бы один раз забили на совместимость и сделали нормальный язык, чем мучались.
carsten 14.10.2011 03:19 # −2
таких никому ненужных "идеальных" язычков -- хуевы тучи, пылятся лежат на полках. теория и практика -- разные вещи.
>сделали нормальный язык
В чём С++ "ненормальный"? Единственный косяк -- это отсутствие constructor chaining и невозможность вызывать виртуальные методы в конструкторе (что насчёт Дельфи в этом плане?). В остальном он отличен.
absolut 14.10.2011 10:10 # +5
в C++11 появилось
TarasB 14.10.2011 13:16 # 0
Ну и? Сейчас, когда столько кода на крестах, уже поздно что-то менять, да. Надо было раньше думать головой.
> Единственный косяк
Это единственный косяк? Да ты ж нормальных языков не видел нихера.
SmackMyBitchUp 15.10.2011 13:10 # +2
TarasB 16.10.2011 11:30 # −1
bugmenot 16.10.2011 14:07 # +2
guest 08.10.2011 20:05 # −4
guest 08.10.2011 20:02 # +5
устарели твои данные, атец. std::array есть крестовый массив. (:
Dummy00001 08.10.2011 20:12 # 0
guest 08.10.2011 21:35 # 0
guest 08.10.2011 20:04 # −3
Lure Of Chaos 08.10.2011 20:32 # 0
actuator 09.10.2011 17:22 # +2
Вот, по Дьюхерсту (кстати, как и топик, тоже связан с проваливанием массива в указатель):
void apply( B array[], int length, void (*f)( B & ) ) {
for( int i = 0; i < length; ++i )
f( array[i] );
}
// . . .
D *dp = new D[3];
apply( dp, 3, somefunc ); // еблысь!
Вот это - адов пиздец.
А топикстартер лишь показал, что ещё не вырос из коротких хеллоуворлдных штанишек.
gegMOPO4 09.10.2011 17:40 # +4
actuator 09.10.2011 18:16 # 0
RS-232 09.10.2011 18:24 # 0
Это не возможно. А то что вы продемонстрировали: это передача шаблона потомка предку. Нет ничего странного.
actuator 09.10.2011 18:51 # +3
В C++ твой базовый класс наследует тебя!!!
Вообще же, если посмотреть на пример со статическим полиморфизмом, видны уши говнооптимизации, которую лучше поручить компилятору.
RS-232 09.10.2011 18:58 # 0
Надеюсь он не занимается со мной сексом? (:
actuator 09.10.2011 19:00 # +3
actuator 09.10.2011 19:07 # 0
RS-232 09.10.2011 19:15 # 0
roman-kashitsyn 09.10.2011 19:26 # +4
RS-232 09.10.2011 19:42 # −3
Реально? Правда что ли, после того, как назвали друг друга друзьями раньше можно было продолжать получать доступ к приватным членам?
Ну всё. Строю машину времени, тем более один раз я это уже делал:
carsten 12.10.2011 09:47 # +1
RS-232 09.10.2011 17:43 # −2
2)Передавай длину массива посредством шаблонного параметра, выводимого компилятором и будет известна его длинна.
gegMOPO4 09.10.2011 17:53 # 0
RS-232 09.10.2011 18:01 # 0
actuator 09.10.2011 18:26 # 0
RS-232 09.10.2011 18:31 # 0
http://ideone.com/ml3Mh
http://ideone.com/DtaYh
C++ это в первую очередь дисциплина
Но в принципе все и так здесь знают, что я думаю про С++ на самом деле. (:
actuator 09.10.2011 18:41 # 0
А дисциплина... Ты видел хоть один язык, где элементарный apply делается через такую жопу?!
RS-232 09.10.2011 18:45 # −1
RS-232 09.10.2011 18:12 # 0
http://ideone.com/jKNhE
,то все прекрасно работает, как видите:
http://ideone.com/J5CKU
И находит логическую ошибку во время компиляции:
http://ideone.com/mohDQ
Если хочется что-то откастовать в другой тип в массиве\контейнере, то добро пожаловать в массив\контейнер указателей или через std::transform в другой массив\контейнер и прочие правильные методы.
actuator 09.10.2011 17:54 # 0
RS-232 09.10.2011 18:21 # 0
Меньше слез, больше дела:
http://ideone.com/4Ds7S
Может можно и в одну функцию.
SmackMyBitchUp 08.10.2011 17:27 # +1
TheHamstertamer 08.10.2011 19:16 # +1
мимоинтересуюсь
TarasB 08.10.2011 19:25 # +1
А вот инициализировать так красиво - нет. Только в Аде.
guest 08.10.2011 20:09 # +2
sayidandrtfm 09.10.2011 08:52 # +2
НЕ осилил или НЕ нравиться - НЕ используй!
Однако, если программист, заявляет что ЯП — говно, то, как программист(в смысле творец), он обязан предложить созданный им лучший вариант — иначе, НЕ программист он боле, но балабол оголтелый (маркетолог с ярко развитыми и резко выраженными коммуникативными навыками) и веры ему НЕТ такому, пустозвону время уничтожающему.
SmackMyBitchUp 09.10.2011 09:00 # +2
sayidandrtfm 09.10.2011 09:33 # +2
gegMOPO4 09.10.2011 11:39 # +5
TarasB 09.10.2011 13:19 # −1
RS-232 09.10.2011 13:32 # −4
roman-kashitsyn 09.10.2011 12:06 # +2
carsten 12.10.2011 09:42 # +1
Никто не принуждает никого использовать сырые массивы вне интеропа со старыми Си-интерфейсами.
К сожалению, в вузах в основном учат не С++, а скорее "Си с некоторыми элементами из С++", откуда и появляются такие примеры.
guest8 09.04.2019 11:42 # −999