Pull to refresh

Comments 39

Открываем для себя чудесный мир C++.

А знаете ли вы, что большинство контейнеров, включая контейнеры STL и Qt на самом деле имеют не полный интерфейс?

В идеальной сферической ситуации каждый метод должен быть в четырех экземплярах:
Тупой парсер съел коммент. Завершу.

В идеальной сферической ситуации каждый метод должен быть в четырех экземплярах:
foo();
foo() const;
foo() volatile;
foo() const volatile;

Скептики могу попробовать написать что-то вроде:

volatile std::vector test;
test.push_back(666);

И насладится ошибкой компиляции.
Вот это да! Об этом не задумывался — спасибо!
Вопрос в том, кому и зачем может понадобиться писать «volatile std::vector»
Видимо чтобы сделать через задницу синхронизацию потоков %)
std::vector тут приведен как пример неполного интерфейса. Понятное дело что никто не будет без надобности раздувать интерфейс, но если volatile будет все-таки для чего-нибудь нужен, то придется кучу раз дублировать код.
Что так мало голосов, неужели С++ больше никому не интересен?
Куда катится этот мир.
Честно говоря, мне не нравится читать про то, как С++ интерпретирует очередную «гениальную» мысль.
Иногда после таких топиков, у меня все больше желания оставить С++. В нем слишком много ненужной сложности. Она мешает.
P.S. Вчера купил книгу по C#. Скорее всего, правильно сделал.
Да ладно, это не лишняя сложность, а гибкость, которой можно пользоваться, а можно и не пользоваться… хотя… знать про неё всё равно надо, она вылазит то тут, то там…

Но всё равно, на мой взгляд, const — единственная действительно навязчивая тонкость С++. Практически все премудрости const можно описать в 3000 символов. Всякими мистическими словами mutable, explicit, volatile, typename… можно не пользоваться и почти ничего не терять от этого.
Вот-вот… В том и проблема, что гибкости «вылазят», а не приходят по комманде.

А ещё конструкторы копирования, операторы присваивания, delete/delete[], порядки инициализации, смещение указателей при обращении к предкам… Ах, да, vector =)
Ну я и не пользуюсь :) тут же ноют «Что так мало голосов, неужели С++ больше никому не интересен? » Вот и объяснил.

Мне вполне достаточно стандартной гибкости С++. И мне не нравится что иногда приходится вникать в глубины, читая чужое. Ну и, ессно, минусующие за свое мнение нашлись сразу.
Вы знаете, в любом языке, если покопаться можно найти такую излишнюю сложность. Например, в шарпе, нужно будет очень четко представлять себе нюансы упаковки.
так «можно не пользоваться» или «вылазит то тут, то там»? :)

для меня было неприятным открытием история про volatile…
>P.S. Вчера купил книгу по C#. Скорее всего, правильно сделал.
думаю, что выброшенные деньги, правда, если не хочешь сделаться промозглым Виндовозником.

я изучаю С++ два года, и каждый раз открываю в нем что-то новое… Выбор С++ — это выбор времени, когда РНР или Питона уже по каким-то причинам (как правило это производительность) становится не хватать.
Я попрограммировал на С++ 4 года :) Мне хватило.
Не надо всех мерять своим аршином.
А я как раз собирался поучить его.
Поэтому такие статьи полезны. Но в тоже время ставят передо мной очень большой вопрос — тот ли это язык, который сейчас мне нужен? Не лучше ли обратить свой взор на Яву, D и так далее.
Вопрос неточно поставлен. Для чего именно нужен язык? Все языки имеют свои плюсы и минусы, и области применения.

Выучите С++ — потом без труда перейдете на Java или D, выучите D или Java — на С++ уже не перейдете.
полностью согл…
С++ — это основа-основ

все основные Опенсоурсы реализованы на Си/С++
все гуру по ООП начинали с С++
Попробуйте написать что-нибудь про то, как на нём легко программировать, какие интересные прграммы получаются, как можно, хоть и через задницу, делать то, что недоступно Java и C#. А не про то, что простейшая вещь требует знания ~9000 ньюансов языка.
Это я о
Что так мало голосов… ?
Насчёт ~9000 ньюансов языка, это Вы загнули. Любой язык нужно знать, чтобы писать адекватный код. Отличие С++ в том, что зная ньюансы, Вы можете писать качественный и очень быстрый код. Это мастерство. Я думаю, отчасти и об этом написана статья.

Каждый выбирает для себя. Одному нравится арбузъ, другому — свиной хрящикъ.
Тут дело в другом…

Просто язык называют hard to learn, even harder to master. Каша из фишек, особенностей, тонкостей, обратной совместимости. Классическим стало выражение про то, что в С++ надо использовать 30% возможностей, но все используют разные 30%.

Понятно, что нишу язык занял плотно, и пока никуда уходить не собирается; хотя и есть другие, лучшие инструменты. Так уж сложилось исторически. С другой стороны, даже полный великий гуру Александреску поддерживает D.

Как быть? Java? C#? Что угодно. А системный уровень — вполне достаточно простого и приятного Си.
Просто очень много слов и очень мало информации.

X::x() const вызывается для объектов типа const X*
X::x() — для объектов типа X*

Вот, собственно, и все. Откуда вообще взялась мысль про то, что объявление переменной может повлиять на вызываемый метод, непонятно.
Оттуда, что у половины людей эта мысль первая придёт в голову как наиболее логичная, если специально не заставить мозг задуматься над этим нюансом. Как только задумался, всё быстро становится на свои места, но до этого можно жить года в неведении.
>Видно, что при выборе const/не-const варианта метода v(), С++ учитывает не константность требуемого результата, а константность объекта для которого вызывается метод.

Дело в том, что в C++ вообще нет перегрузки по возвращаемому результату.
UFO just landed and posted this here
UFO just landed and posted this here
А, Вы в этом плане. Полагаю, иногда и такое все-таки бывает полезным.

Но я вообще подумал, что Вы говорите о возврате int по ссылке :)
UFO just landed and posted this here
Эээм… Синглтон Мейерса?
UFO just landed and posted this here
Ну, само собой, таких примеров есть ещё.
А почему оператор не нарушает инкапсуляции, в то время как метод — нарушает?
Так же данный подход позволит разделить, когда возвращать список состоящий из простых и константных указателей.

Например у вас есть область, она возвращает список городов, но вы хотите, что бы в определенной функции можно было только просматривать, какие города есть в этой области, но не менять ни их названий ни их географических данных.

Тогда и делаете, два метода, один который возвращает список не константных указателей, а второй список из константных.
Sign up to leave a comment.

Articles