- 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
хотя маразмы геймдева начинают доставать потиху.
ЗЫ std::vector специально для этих целей существует.
т.е. типа синтакс пролистал и уже готов как специалист?
это ж даже в страуструпе написано: std::vector есть крестовый массив.
да? даже для случая, когда размер массива известен заранее и не будет меняться?
[code=cpp]
struct blablabla {
int data[4];
};
[code]
АХРЕНЕТЬ
И не надо тыкать в незнание стандарта. Если в стандарте написано, что говно воняет, то оно от этого не перестанет вонять.
Короче, я хуею с кривости этого "ублюдочного недоязычка" (эпитет не мой).
А ещё если в функцию передать int[4], то передастся указатель, а если структуру, то весь массив скопируется на стек.
для обратной совместимости с С, в С++ массив работает аналогично.
для С++ приложений, есть кучи классов контейнеров, в которых само собой разумется присваивание определено.
ЛУчше бы один раз забили на совместимость и сделали нормальный язык, чем мучались.
таких никому ненужных "идеальных" язычков -- хуевы тучи, пылятся лежат на полках. теория и практика -- разные вещи.
>сделали нормальный язык
В чём С++ "ненормальный"? Единственный косяк -- это отсутствие constructor chaining и невозможность вызывать виртуальные методы в конструкторе (что насчёт Дельфи в этом плане?). В остальном он отличен.
в C++11 появилось
Ну и? Сейчас, когда столько кода на крестах, уже поздно что-то менять, да. Надо было раньше думать головой.
> Единственный косяк
Это единственный косяк? Да ты ж нормальных языков не видел нихера.
устарели твои данные, атец. std::array есть крестовый массив. (:
Вот, по Дьюхерсту (кстати, как и топик, тоже связан с проваливанием массива в указатель):
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 ); // еблысь!
Вот это - адов пиздец.
А топикстартер лишь показал, что ещё не вырос из коротких хеллоуворлдных штанишек.
Это не возможно. А то что вы продемонстрировали: это передача шаблона потомка предку. Нет ничего странного.
В C++ твой базовый класс наследует тебя!!!
Вообще же, если посмотреть на пример со статическим полиморфизмом, видны уши говнооптимизации, которую лучше поручить компилятору.
Надеюсь он не занимается со мной сексом? (:
Реально? Правда что ли, после того, как назвали друг друга друзьями раньше можно было продолжать получать доступ к приватным членам?
Ну всё. Строю машину времени, тем более один раз я это уже делал:
2)Передавай длину массива посредством шаблонного параметра, выводимого компилятором и будет известна его длинна.
http://ideone.com/ml3Mh
http://ideone.com/DtaYh
C++ это в первую очередь дисциплина
Но в принципе все и так здесь знают, что я думаю про С++ на самом деле. (:
А дисциплина... Ты видел хоть один язык, где элементарный apply делается через такую жопу?!
http://ideone.com/jKNhE
,то все прекрасно работает, как видите:
http://ideone.com/J5CKU
И находит логическую ошибку во время компиляции:
http://ideone.com/mohDQ
Если хочется что-то откастовать в другой тип в массиве\контейнере, то добро пожаловать в массив\контейнер указателей или через std::transform в другой массив\контейнер и прочие правильные методы.
Меньше слез, больше дела:
http://ideone.com/4Ds7S
Может можно и в одну функцию.
мимоинтересуюсь
А вот инициализировать так красиво - нет. Только в Аде.
НЕ осилил или НЕ нравиться - НЕ используй!
Однако, если программист, заявляет что ЯП — говно, то, как программист(в смысле творец), он обязан предложить созданный им лучший вариант — иначе, НЕ программист он боле, но балабол оголтелый (маркетолог с ярко развитыми и резко выраженными коммуникативными навыками) и веры ему НЕТ такому, пустозвону время уничтожающему.
Никто не принуждает никого использовать сырые массивы вне интеропа со старыми Си-интерфейсами.
К сожалению, в вузах в основном учат не С++, а скорее "Си с некоторыми элементами из С++", откуда и появляются такие примеры.