Здравствуйте, esil, Вы писали:
E>Чем константа отличается от "объекта только для чтения"? Я знаю только одно отличие для глобальных целоцисленных констант — их можно использовать в качестве размера массива, и то это появилось не сразу.
5.19 Constant expressions [expr.const]
1 In several places, C + + requires expressions that evaluate to an integral or enumeration constant: as array
bounds (8.3.4, 5.3.4), as case expressions (6.4.2), as bit-field lengths (9.6), as enumerator initializers (7.2),
as static member initializers (9.4.2), and as integral or enumeration non-type template arguments (14.3).
И возвращаясь к "особенным особенностям C++", где логика в нижеследующем примере?:
const int a_size = 10;
int a[a_size]; // OKconst int b_size[3] = { 10, 20, 30 };
int b0[b_size[0]]; // error: expression must have a constant value
Здравствуйте, igna, Вы писали:
E>>Чем константа отличается от "объекта только для чтения"? Я знаю только одно отличие для глобальных целоцисленных констант — их можно использовать в качестве размера массива, и то это появилось не сразу.
I>
I>5.19 Constant expressions [expr.const]
I>1 In several places, C + + requires expressions that evaluate to an integral or enumeration constant: as array
I>bounds (8.3.4, 5.3.4), as case expressions (6.4.2), as bit-field lengths (9.6), as enumerator initializers (7.2),
I>as static member initializers (9.4.2), and as integral or enumeration non-type template arguments (14.3).
И зачем вы сейчас этот абзац привели? Constant expression — это по вашему константа? Ну например, "4.5f" — это не constant expression. По-вашему, это не константа? Давайте тогда определимся, что вы считаете константой.
I>И возвращаясь к "особенным особенностям C++", где логика в нижеследующем примере?:
I>
I>const int a_size = 10;
I>int a[a_size]; // OK
I>const int b_size[3] = { 10, 20, 30 };
I>int b0[b_size[0]]; // error: expression must have a constant value
I>
Логика в том, что единственное отношение слова const к Constant expression — это то, что переменная целочисленного типа, объявленная с квалификатором const и инициализированная при объявлении, является constant expression. По сути это единственное исключение, сделанное для удобства. Можете не использовать. Есть отдельная штука для констант — enum называется, пользуйтесь им.
Здравствуйте, esil, Вы писали:
E>И зачем вы сейчас этот абзац привели?
Ну ты же знал "только одно отличие для глобальных целоцисленных констант — их можно использовать в качестве размера массива", теперь вот будешь знать еще несколько.
Здравствуйте, igna, Вы писали:
I>Здравствуйте, esil, Вы писали:
E>>И зачем вы сейчас этот абзац привели?
I>Ну ты же знал "только одно отличие для глобальных целоцисленных констант — их можно использовать в качестве размера массива", теперь вот будешь знать еще несколько.
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Здравствуйте, B0FEE664, Вы писали:
НС>>>Тем, что заради наследования исключительно реализации, ты занаследовал публично еще и два контракта. Результат — бардак в контрактах, что куда больнее чем бардак в реализациях. BFE>>А в чём бардак ? НС>Лишние ненужные сущности.
Какие сущности тут лишние ?
BFE>> Прямоугольник может быть представим как точка или как размер. НС>Логически — нет.
А что это значит ? В каком смысле он не представим ? В геометрическом ?
Мне тут кажется всё логичным. Захотели подвинуть прямоугольник — изменили точку, захотели изменить размер — меняем size. Что не логично?
BFE>> Нарушение каких контрактов вы предполагаете ? НС>Где я писал про нарушения? Я писал про бардак.
Здравствуйте, LaptevVV, Вы писали:
А>>А стоит ли сейчас вообще начинать изучать с++? Или лучше браться сразу за другие языки типа c#, java, python? LVV>TЕсли ть профи — нужно. LVV>С# — это продукт фирмы, Java — это продукт фирмы. Гикнутся фирмы — где будут эти языки? Даже если фирма не гикнется, язык может выйти из употребления по другим причинам (пример — PL-1 фирмы IBM). LVV>А С++ — он как Фортран... Он — уже бессмертен!
Язык С++ очень сложный. Причём сложный не только для изучающих, но и для пишущих компиляторы. Многие вещи в нём как будто специально созданы, чтобы тяжелее было реализовать нормальный компилятор.
Поэтому порог вхождения в их круг очень высок. Создать нормальный компилятор сложно, а чтобы он ещё был популярен, приносил прибыль, выдавал хороший код ещё тяжелее. Поэтому не так много осталось игроков, которые могут осилить тотже C++0x.
Здравствуйте, Sheridan, Вы писали:
LVV>> Мои студенты говорят: Кто продрался через С++, для того все перечисленные языки — семечки... S>Неужели настолько сложный?
очень сложный язык. Причём это понимаешь не сразу. Только с опытом приходит понимание, что пишешь ты на нём не очень. Я когда студентом был, то думал, что хорошо язык знаю. Чем больше его осваивал тем сильнее сомневался.
Сейчас моё мнение — лучше не учить его. шарп или ява намного проще.
Если хочется архитектуру пощупать можно и ассемблер какой-нибудь изучить, или на Си немного пописать.
Но это в контексте этой ветки. Для многих вопроса учить или нет С++ не стоит. Они точно знают, что он им нужен.
Здравствуйте, B0FEE664, Вы писали:
BFE>Какие сущности тут лишние ?
Пошли по кругу.
НС>>Логически — нет. BFE>А что это значит ?
То и значит — бессмысленноя с точки зрения решаемых задач отношение наследования.
BFE> В каком смысле он не представим ? В геометрическом ? BFE>Мне тут кажется всё логичным. Захотели подвинуть прямоугольник — изменили точку, захотели изменить размер — меняем size. Что не логично?
Мда, против такой логики я бессилен.
BFE>Ну и в чём он состоит ?