Комментарии 39
Открываем для себя чудесный мир C++.
А знаете ли вы, что большинство контейнеров, включая контейнеры STL и Qt на самом деле имеют не полный интерфейс?
В идеальной сферической ситуации каждый метод должен быть в четырех экземплярах:
А знаете ли вы, что большинство контейнеров, включая контейнеры STL и Qt на самом деле имеют не полный интерфейс?
В идеальной сферической ситуации каждый метод должен быть в четырех экземплярах:
+3
Тупой парсер съел коммент. Завершу.
В идеальной сферической ситуации каждый метод должен быть в четырех экземплярах:
foo();
foo() const;
foo() volatile;
foo() const volatile;
Скептики могу попробовать написать что-то вроде:
volatile std::vector test;
test.push_back(666);
И насладится ошибкой компиляции.
В идеальной сферической ситуации каждый метод должен быть в четырех экземплярах:
foo();
foo() const;
foo() volatile;
foo() const volatile;
Скептики могу попробовать написать что-то вроде:
volatile std::vector test;
test.push_back(666);
И насладится ошибкой компиляции.
+10
Вот это да! Об этом не задумывался — спасибо!
0
а я три года думал почему у меня банальные вещи глючат
именно как описано по первой ссылке в гугле
именно как описано по первой ссылке в гугле
0
Вопрос в том, кому и зачем может понадобиться писать «volatile std::vector»
0
Что так мало голосов, неужели С++ больше никому не интересен?
Куда катится этот мир.
Куда катится этот мир.
-2
Честно говоря, мне не нравится читать про то, как С++ интерпретирует очередную «гениальную» мысль.
Иногда после таких топиков, у меня все больше желания оставить С++. В нем слишком много ненужной сложности. Она мешает.
P.S. Вчера купил книгу по C#. Скорее всего, правильно сделал.
Иногда после таких топиков, у меня все больше желания оставить С++. В нем слишком много ненужной сложности. Она мешает.
P.S. Вчера купил книгу по C#. Скорее всего, правильно сделал.
-2
Да ладно, это не лишняя сложность, а гибкость, которой можно пользоваться, а можно и не пользоваться… хотя… знать про неё всё равно надо, она вылазит то тут, то там…
Но всё равно, на мой взгляд, const — единственная действительно навязчивая тонкость С++. Практически все премудрости const можно описать в 3000 символов. Всякими мистическими словами mutable, explicit, volatile, typename… можно не пользоваться и почти ничего не терять от этого.
Но всё равно, на мой взгляд, const — единственная действительно навязчивая тонкость С++. Практически все премудрости const можно описать в 3000 символов. Всякими мистическими словами mutable, explicit, volatile, typename… можно не пользоваться и почти ничего не терять от этого.
+5
Вот-вот… В том и проблема, что гибкости «вылазят», а не приходят по комманде.
А ещё конструкторы копирования, операторы присваивания, delete/delete[], порядки инициализации, смещение указателей при обращении к предкам… Ах, да, vector =)
А ещё конструкторы копирования, операторы присваивания, delete/delete[], порядки инициализации, смещение указателей при обращении к предкам… Ах, да, vector =)
+3
Ну я и не пользуюсь :) тут же ноют «Что так мало голосов, неужели С++ больше никому не интересен? » Вот и объяснил.
Мне вполне достаточно стандартной гибкости С++. И мне не нравится что иногда приходится вникать в глубины, читая чужое. Ну и, ессно, минусующие за свое мнение нашлись сразу.
Мне вполне достаточно стандартной гибкости С++. И мне не нравится что иногда приходится вникать в глубины, читая чужое. Ну и, ессно, минусующие за свое мнение нашлись сразу.
+1
Вы знаете, в любом языке, если покопаться можно найти такую излишнюю сложность. Например, в шарпе, нужно будет очень четко представлять себе нюансы упаковки.
+1
так «можно не пользоваться» или «вылазит то тут, то там»? :)
для меня было неприятным открытием история про volatile…
для меня было неприятным открытием история про volatile…
+1
>P.S. Вчера купил книгу по C#. Скорее всего, правильно сделал.
думаю, что выброшенные деньги, правда, если не хочешь сделаться промозглым Виндовозником.
я изучаю С++ два года, и каждый раз открываю в нем что-то новое… Выбор С++ — это выбор времени, когда РНР или Питона уже по каким-то причинам (как правило это производительность) становится не хватать.
думаю, что выброшенные деньги, правда, если не хочешь сделаться промозглым Виндовозником.
я изучаю С++ два года, и каждый раз открываю в нем что-то новое… Выбор С++ — это выбор времени, когда РНР или Питона уже по каким-то причинам (как правило это производительность) становится не хватать.
0
А я как раз собирался поучить его.
Поэтому такие статьи полезны. Но в тоже время ставят передо мной очень большой вопрос — тот ли это язык, который сейчас мне нужен? Не лучше ли обратить свой взор на Яву, D и так далее.
Поэтому такие статьи полезны. Но в тоже время ставят передо мной очень большой вопрос — тот ли это язык, который сейчас мне нужен? Не лучше ли обратить свой взор на Яву, D и так далее.
0
Вопрос неточно поставлен. Для чего именно нужен язык? Все языки имеют свои плюсы и минусы, и области применения.
+3
Выучите С++ — потом без труда перейдете на Java или D, выучите D или Java — на С++ уже не перейдете.
0
Попробуйте написать что-нибудь про то, как на нём легко программировать, какие интересные прграммы получаются, как можно, хоть и через задницу, делать то, что недоступно Java и C#. А не про то, что простейшая вещь требует знания ~9000 ньюансов языка.
+1
Это Вы о чём?
0
Это я о
Что так мало голосов… ?
0
Насчёт ~9000 ньюансов языка, это Вы загнули. Любой язык нужно знать, чтобы писать адекватный код. Отличие С++ в том, что зная ньюансы, Вы можете писать качественный и очень быстрый код. Это мастерство. Я думаю, отчасти и об этом написана статья.
Каждый выбирает для себя. Одному нравится арбузъ, другому — свиной хрящикъ.
Каждый выбирает для себя. Одному нравится арбузъ, другому — свиной хрящикъ.
0
Тут дело в другом…
Просто язык называют hard to learn, even harder to master. Каша из фишек, особенностей, тонкостей, обратной совместимости. Классическим стало выражение про то, что в С++ надо использовать 30% возможностей, но все используют разные 30%.
Понятно, что нишу язык занял плотно, и пока никуда уходить не собирается; хотя и есть другие, лучшие инструменты. Так уж сложилось исторически. С другой стороны, даже полный великий гуру Александреску поддерживает D.
Как быть? Java? C#? Что угодно. А системный уровень — вполне достаточно простого и приятного Си.
Просто язык называют hard to learn, even harder to master. Каша из фишек, особенностей, тонкостей, обратной совместимости. Классическим стало выражение про то, что в С++ надо использовать 30% возможностей, но все используют разные 30%.
Понятно, что нишу язык занял плотно, и пока никуда уходить не собирается; хотя и есть другие, лучшие инструменты. Так уж сложилось исторически. С другой стороны, даже полный великий гуру Александреску поддерживает D.
Как быть? Java? C#? Что угодно. А системный уровень — вполне достаточно простого и приятного Си.
0
Просто очень много слов и очень мало информации.
X::x() const вызывается для объектов типа const X*
X::x() — для объектов типа X*
Вот, собственно, и все. Откуда вообще взялась мысль про то, что объявление переменной может повлиять на вызываемый метод, непонятно.
X::x() const вызывается для объектов типа const X*
X::x() — для объектов типа X*
Вот, собственно, и все. Откуда вообще взялась мысль про то, что объявление переменной может повлиять на вызываемый метод, непонятно.
+10
>Видно, что при выборе const/не-const варианта метода v(), С++ учитывает не константность требуемого результата, а константность объекта для которого вызывается метод.
Дело в том, что в C++ вообще нет перегрузки по возвращаемому результату.
Дело в том, что в C++ вообще нет перегрузки по возвращаемому результату.
+4
НЛО прилетело и опубликовало эту надпись здесь
Так же данный подход позволит разделить, когда возвращать список состоящий из простых и константных указателей.
Например у вас есть область, она возвращает список городов, но вы хотите, что бы в определенной функции можно было только просматривать, какие города есть в этой области, но не менять ни их названий ни их географических данных.
Тогда и делаете, два метода, один который возвращает список не константных указателей, а второй список из константных.
Например у вас есть область, она возвращает список городов, но вы хотите, что бы в определенной функции можно было только просматривать, какие города есть в этой области, но не менять ни их названий ни их географических данных.
Тогда и делаете, два метода, один который возвращает список не константных указателей, а второй список из константных.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Тонкости перегрузки методов по константности *this