English version

RSS

C/C++

Автор: Беляев Игорь Олегович
Аннотация: В статье представлена реализация приоритетной очереди на основе бинарной, биномиальной и фибоначчиевой куч. Указаны асимптотические сложности и приведены сравнительные характеристики базовых операций. Данная приоритетная очередь будет использована для разработки агента «хранителя знаний» многоагентной поисковой системы.

Ключевые слова: Структуры данных; бинарная куча; биномиальная куча; фибоначчиева куча;
Автор: Конева Анна Александровна
Аннотация: Данная статья посвящена проблемам взаимодействия кода на языках C/C++/Objective-C. Здесь охватываются различные темы – и объектно-оринтированного программирования, и процедурного, такие возможности Objective-C, как блоки, и аналогичные возможности C++11 – лямбды, а также некоторые нюансы стандарта C99.

Ключевые слова: Objective-C; C++; C; Взаимодействие; Проблемы; С++11; C89; C99
Автор: Павел Кузнецов
Аннотация: <span class='lineQuote level1'>P&gt;Объясните, пожалуйста, текст стандарта является каким-то секретом? Защищен копирайтом так, что его читать нельзя?</span><br /> <br /> Читать стандарт можно, секретом он не является. Однако окончательная версия стандарта не является бесплатной, электронную версию можно скачать за $18 с сайта [url=<a class="m" href="http://www.iso.org" target="_blank">http://www.iso.org</a>...

Ключевые слова:
Автор: Старостин Василий Викторович
Источник: RSDN Magazine #2-2010
Аннотация: Несколько веселых и интересных примеров на языке C++.

Ключевые слова: C++, прикол, шутка
Автор: LaptevVV
Аннотация: Здравствуйте, DmitryU, Вы писали:<br /> <span class='lineQuote level1'><br /> DU&gt;По различным предметам существуют различные сертификации</span><br /> <span class='lineQuote level1'>DU&gt;Когда я сдавал сертификацию на MCSE то была возможность найти вопросник с ответами на</span><br /> <span class='lineQuote level1'>DU&gt;TestKing или Transcender или Fravo или тому подобное</span><br /> <span class='lineQuote level1'>DU&gt;А как бы найти подходящий тест с ответами по с++</span><br /> DU...

Ключевые слова:
Автор: Андрей Карпов
Источник: RSDN Magazine #1-2007
Аннотация: Рассмотрены программные ошибки, проявляющие себя при переносе Си++ - кода с 32-битных платформ на 64-битные платформы. Приведены примеры некорректного кода и способы его исправления. Перечислены методики и средства анализа кода, позволяющие диагностировать обсуждаемые ошибки.

Ключевые слова: cpp
Автор: Григорьев Вячеслав Владимирович
Аннотация: В статье кратко рассматриваются плюсы и минусы реализации на C++ библиотек / сред, предлагающих разработчику новые парадигмы программирования или новое подмножество языка (Domain Specific Language). В качестве примера обсуждаются реализации функционального программирования в библиотеках boost::lambda и boost::phoenix.

Ключевые слова: boost; lambda; phoenix; функциональное программирование в C++

C++ 11

Автор: Павел Кузнецов
Аннотация: Dr.Gigabit,<br /> <span class='lineQuote level1'><br /> &gt; 1) Каково сейчас положение дел со стандартом С++ (какие последние версии, каков механизм принятия стандарта, когда ждать очередного релиза и т.д). Доступна ли полная версия стандарта для общественного пользования? (слышал, что нет)</span><br /> <br /> Стандарт принят в 1998 году, в 2003 к нему вышл...

Ключевые слова:
Автор: Павел Кузнецов
Аннотация: В форуме часто проскакивают вопросы: "Чего новенького ожидается в следующем стандарте?"<br /> Строго говоря, естественно, точного ответа на этот вопрос не знает никто, включая комитет<br /> стандартизации. Однако, получить некоторое представление чего, в принципе, можно ожидать<br /> от следующей версии языка, мож...

Ключевые слова:
Автор: Владимиров Константин Игоревич
Аннотация: Освещены такие части нового стандарта, как rvalue references и lambda expressions. Подробно изложены относящиеся к ним вопросы, в том числе использование std::move и std::function

Ключевые слова: C++11; rvalue references; lambda expressions;
Автор: Садовников Сергей Михайлович
Перевод:
Источник:
Материал предоставил:
Аннотация: В статье проводится обзор основных возможностей шаблонов с переменным количеством аргументов, которые появились в новом станрте C++ (C++11), а также рассматривается их применение на примерах реализации различных функторов.

Ключевые слова: C++; C++11; variadic templates; Шаблоны C++;

С++ Arena

Автор: Александр Шаргин
Источник: RSDN Magazine #2
Аннотация: Делегаты в CLR удобны, типобезопасны и эффективны. Последнее время на форумах RSDN часто поднимается вопрос о том, можно ли реализовать делегаты с аналогичными свойствами, оставаясь в рамках "чистого" C++. Оказывается, это вполне возможно. В этой статье я покажу, как это сделать.

Ключевые слова: delegates
Автор: Андрей Мартынов
Источник: RSDN Magazine #5-2003
Аннотация: В статье рассмотрен декларативный подход к решению задачи чтения/записи XML-файлов из программ на классическом C++. Метод основан на построении специальной структуры статических данных - метаданных типов.

Ключевые слова: xml
Автор: Сабельников Андрей Николаевич
Источник: RSDN Magazine #1-2006
Аннотация: “Вопросы сохранения данных из объектов, так или иначе, возникают у каждого разработчика”. Именно с этой фразы я начал первую статью посвещённую сериализации, и с этой фразы мне бы хотелось продолжить описание идеи использования карт для организации сериализации. Если вы пишете на С++, то ваша программа скорее всего состоит из объектов классов, которые в своей совокупности образуют некую систему данных и кода, работающего с этими данныим. И практически всегда вы хотите в какой-то момент сохранить в том или ином виде эти данные – будь то результат многолетних вычислений программы или просто текущее состояние каких-то компонентов системы. А потом снова загрузить эти данные назад, в вашу программу, как будто бы и ничего не происходило. Или искажем отправить эти данные по сети, другой программе. И при этом, очень нехочетатся трартить много времени на программирование сохранения/загрузки, упаковку стрктур в каки-то изобретённые сегодня утром форматы, отладку всего этого, модификацию в связи с появлением в структурах данных новых полей, документирование, и прочую головную боль. Подход, описаный ниже, я надеюсь, поможет многим сэкономить время и облегчить жизнь.

Ключевые слова: Serialization
Автор: Владислав Юдин
Источник: RSDN Magazine #1-2005
Аннотация: Цель данной статьи - показать, что метаданные это мощный механизм, требующий выделения в отдельный компонент, который хотелось бы видеть в стандартной библиотеке С++.

Ключевые слова: metadata
Автор: Александр Шаргин
Аннотация: В языке C++ есть восьмеричные, десятичные и шестнадцатеричные константы. А двоичных - нет. Тем не менее, при помощи препроцессора можно соорудить макрос, который позволит нам смоделировать такие константы. Основная идея - преобразовывать восьмеричную константу в двоичную, выделяя из неё отдельные ци...

Ключевые слова:
Автор: Клюев Александр
Источник: RSDN Magazine #2-2003
Аннотация: Мультиметоды - виртуальные функции, принадлежащие сразу нескольким классам. В статье разбирается суть мультиметодов, их особенности, а также возможная реализация мультиметодов на C++.

Ключевые слова: Мультиметоды, multimethods
Автор: remark
Аннотация: [пост получился достаточно длинный, поэтому сразу скажу о бонусе — это простой и эффективный алгоритм очереди на основе буфера фиксированного размера — нетерпеливые могут сразу перемещаться к концу поста <img border='0' width='15' height='15' src='../Forum/images/smile.gif' /> ]<br /> <br /> Последние дни на RSDN шла своего рода распределенная игра по написанию lock-free контейн...

Ключевые слова:
Автор: Алексндр Клюев
Аннотация: Демонстрационный проект - events.zip

Ключевые слова:
Автор: Андрей Солодовников
Источник: RSDN Magazine #4-2004
Аннотация: В данной статье описывается способ реализации отложенной загрузки динамических библиотек на С++ без использования механизма delayload, приведена реализация библиотеки отложенной загрузки и пример ее использования.

Ключевые слова: DelayLoad
Автор: Михаил Чащин
Источник: RSDN Magazine #1
Аннотация: В данной статье мы рассмотрим обобщённую реализацию сборки мусора на С++. Будут обсуждены два конкретных алгоритма сборки мусора – “Mark-Sweep” и “Mark-Compact”, и их реализация. Мы также рассмотрим ограничения, которые накладываются на приложения при использовании сборки мусора, и изменения в компи...

Ключевые слова:
Автор: Денис Майдыковский
Аннотация: В этой статье автор рассматривает различные способы реализации свойств в стиле Visual Basic на C++. Некоторые способы специфичны для Visual C++, тогда как другие годятся для применения в любой программе, написанной на языке C++.

Ключевые слова:
Автор: Павел Кузнецов
Источник: RSDN Magazine #2
Аннотация: Время от времени при работе с шаблонами возникает необходимость специализировать шаблон класса по одному из аргументов. В качестве примера можно рассмотреть шаблон классов матриц, параметризованный типом элемента и размерами матрицы. Однако некоторые компиляторы не поддерживают частичную специализацию, и, как следствие, «не понимают» подобные конструкции. Желание получить эквивалентную функциональность при работе с такими компиляторами приводит к технике, описанной ниже.

Ключевые слова:
Автор: Проскурня М.О.
Аннотация: В некоторых языках программирования существует конструкция вида try-finally, в которой секция finally выполнялась обязательно, как при возникновении исключений, так и при нормальном ходе выполнения программы. Поскольку в языке C++ такой конструкции явно не присутствует, мы можем попытаться описать её самостоятельно, прибегая к помощи макропрепроцессора.

Ключевые слова: try-finally
Авторы: Вьюков Дмитрий Сергеевич
Тепляков Сергей Владимирович
Источник: RSDN Magazine #4-2009
Аннотация: В данной статье рассмотрены несколько решений, позволяющих ослабить или практически полностью избавиться от недостатков перечислений (enumerations) языка программирования С++. Представленные решения, отличаются сложностью реализации и функциональностью, и могут оказаться полезными в арсенале каждого современного разработчика.

Ключевые слова: С++; перечисления; кодогенерация; метапрограммирование; типобезопасность;
Автор: Don Clugston
Перевод: Денис Буличенко
Источник: Member Function Pointers and the Fastest Possible C++ Delegates
Материал предоставил: RSDN Magazine #6-2004
Аннотация: В данной статье предоставлен исчерпывающий материал по указателям на функции-члены, а также приведена реализация делегатов, которые занимают всего две операции на ассемблере.

Ключевые слова: Делегаты, указатели, функции-члены

C++/CLI

Автор: DmitriyKC
Аннотация: Здесь : <a class="m" href="" target="_blank">http://www.ecma-international.org/publications/standards/Ecma-372.htm</a>

Ключевые слова:
Автор: Pavel Chikulaev
Аннотация: Что-то раньше не замечал <img border='0' width='15' height='20' src='../Forum/images/shuffle.gif' />, но на сайте коммитета лежит замечательная презентация Герба Саттера "C++/CLI Overview" (67 страниц).<br /> <br /> <a class="m" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1557.pdf" target="_blank">www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1557.pdf</a><br /> <br /> Рекомендую <img border='0' width='15' height='15' src='../Forum/images/smile.gif' /> даже для тех, кто не собирается писать на C++/CLI, полезно зачем он нужен и что в не...

Ключевые слова:

CRT

Автор: Виталий Брусенцев
Источник: RSDN Magazine #0
Аннотация: Статья посвящена вопросам оптимизации размера выполняемых модулей, генерируемых различными компиляторами C++ (основное внимание уделено MS Visual С++). С этой целью рассматриваются особенности Библиотеки исполнения C/C++ и ее реализаций, а также процессы компиляции и компоновки приложений. Приведены практические приемы, позволяющие в ряде случаев уменьшить размер приложения до величины 3-4 килобайта.

Ключевые слова:

Deep C++

Автор: Павел Кузнецов
Источник: RSDN Magazine #5-2004
Аннотация: - Бывают ли в C++ чисто виртуальные деструкторы? Кажется мне, что нет – ведь деструктор наследника обязан вызвать деструктор базового класса. А что ему делать, если у базового класса деструктор не определен? - Является ли в C++ имя функции указателем на ее начало, как это было в С?

Ключевые слова:
Автор: Андрей Тарасевич
Аннотация: Q. Довольно продолжительное время ломаю голову - когда делать функцию константной, а когда в этом нет необходимости???

Ключевые слова:
Автор: Кодт
Аннотация: <span class='lineQuote level2'>G&gt;&gt;как понимать const volatile и зачем оно такое нужно?</span><br /> <span class='lineQuote level1'><br /> ПК&gt;volatile означает, что объект может изменяться как-то помимо действий программы, const — объект действиями программы через данный идентификатор не изменяется. const volatile — объект изменяется только "внешними" по отношению к программе с...</span>

Ключевые слова:
Автор: What
Аннотация: Здравствуйте, Yozh_Programmer, Вы писали:<br /> <span class='lineQuote level1'><br /> Y_P&gt;Почему этот код</span><br /> <span class='lineQuote level1'><br /> <br /> Y_P&gt;[ccode]</span><br /> <span class='lineQuote level1'>Y_P&gt;#include &lt;windows.h&gt;</span><br /> <span class='lineQuote level1'>Y_P&gt;#include &lt;stdio.h&gt;</span><br /> <span class='lineQuote level1'>Y_P&gt;#define _USE_MATH_DEFINES</span><br /> <span class='lineQuote level1'>Y_P&gt;#include &lt;math.h&gt;</span><br /> <span class='lineQuote level1'>Y_P&gt;#include &lt;conio.h&gt;</span><br /> <span class='lineQuote level1'><br /> Y_P&gt;const double Log10 = log(10.0);</span><br /> <span class='lineQuote level1'><br /> Y_P&gt;int main()</span><br /> <span class='lineQuote level1'>Y_P&gt;{</span><br /> <span class='lineQuote level1'>Y_P&gt; int x = 100;</span><br /> <span class='lineQuote level1'>Y_P&gt; p...</span>

Ключевые слова:
Автор: Сергей Холодилов
Источник: RSDN Magazine #3-2008
Аннотация: Библиотека ввода-вывода языка С++ — достаточно спорное явление. Но, так или иначе, она существует, иногда используется, и надо как-то с этим жить.

Ключевые слова: stream
Автор: Павел Кузнецов
Аннотация: lvalue и rvalue - что это такое.

Ключевые слова: lvalue,rvalue
Автор: Robert Schmidt
Перевод: Igor Sukharev
Источник: MSDN
Аннотация: Судя по группам новостей, посвященных C++, разница между четырьмя операторами приведения типа

Ключевые слова:
Автор: Mr. None
Аннотация: Здравствуйте, Аноним, Вы писали:<br /> <span class='lineQuote level1'><br /> А&gt;Здравствуйте, Аноним, Вы писали:</span><br /> <span class='lineQuote level2'><br /> А&gt;&gt;Гарантируется ли стандартом размещение элементов строки в непрерывном блоке памяти, как это сделано для вектора? И имеет ли строка нуль терминатор равный *(string.end()). Спасибо</span><br /> <span class='lineQuote level1'>А&gt;Гарантируется если вызовешь c_str(), а в ...</span>

Ключевые слова:
Автор: Андрей Тарасевич
Аннотация: <span class='lineQuote level1'>К&gt;Все совершенно верно про неопределенное поведение.</span><br /> <span class='lineQuote level1'>К&gt;<b>Любая функция с побочным эффектом</b> (а оператор автоинкремента таковым является) способна дать такой же результат.</span><br /> <br /> Не совсем так. Важным является тот факт, что несколько модификаций одного скалярного объекта оказались зажатыми между дву...

Ключевые слова:
Автор: Андрей Тарасевич
Аннотация: <span class='lineQuote level1'>NG&gt;Объясните каким правилом разруливается ситуация сравнения знаковых/беззнаковых целых в следующем примере:</span><br /> <br /> Сравнения знакового и беззнакового делается как беззнаковое. Т.е. знаковое значение приводится к беззнаковому типу.<br /> <span class='lineQuote level1'><br /> NG&gt; int i = -1;</span><br /> <span class='lineQuote level1'>NG&gt; unsigned int ui = 10;</span><br /> <span class='lineQuote level1'><br /> NG&gt; if (i &lt; ui)</span><br /> <span class='lineQuote level1'>NG&gt; {</span><br /> ...

Ключевые слова:
Автор: Павел Кузнецов
Аннотация: <span class='lineQuote level1'>А&gt;Какая между ними разница(unspecified и undefined)?</span><br /> <br /> Различается несколько вариантов поведения программ, выходящего за рамки стандарта: undefined, unspecified и implementation-defined.<br /> <br /> <b>Implementation-defined behavior (1.3.5)</b><br /> <br /> Самый мягкий вариант. Поведение программы при корректных вх...

Ключевые слова:
Автор: Андрей Тарасевич
Аннотация: <span class='lineQuote level1'>К&gt;Все совершенно верно про неопределенное поведение.</span><br /> <span class='lineQuote level1'>К&gt;<b>Любая функция с побочным эффектом</b> (а оператор автоинкремента таковым является) способна дать такой же результат.</span><br /> <br /> Не совсем так. Важным является тот факт, что несколько модификаций одного скалярного объекта оказались зажатыми между дву...

Ключевые слова:
Автор: Андрей Тарасевич
Аннотация: <span class='lineQuote level1'>А&gt;по C NULL машинно зависим т.е. может и не быть в представлении машины нулем,</span><br /> <span class='lineQuote level1'>А&gt;а Страуструп пишет что можно безболезненно менять 0 на NULL. Что делать?</span><br /> <br /> Ты путаешь понятие "физического нуля" с понятием "логического нуля". <br /> <br /> Есть понятие null-pointer constant. И есть понятие null-pointer value...

Ключевые слова:
Автор: Кодт
Аннотация: Здравствуйте, cppNewbie, Вы писали:<br /> <span class='lineQuote level1'><br /> N&gt;Если инициализировать указатель родительского класса адресом объекта дочернего класса и объявить в родительском классе деструктор виртуальным, то при "разрушении" дочернего объекта через этот указатель сначала выполнится деструктор дочернего класса, а потом д...</span>

Ключевые слова:
Автор: Павел Кузнецов
Аннотация: <span class='lineQuote level1'>Д&gt; кажется мне, что нет... ведь деструктор наследника обязан вызвать деструктор</span><br /> <span class='lineQuote level1'>Д&gt; базового класса. А что ему делать, если у базового класса деструктор не определен?</span><br /> <br /> Чисто виртуальные деструкторы бывают. В этом отношении деструкторы ведут себя так же, как и любые другие функции, за упомянутым ис...

Ключевые слова:
Автор: Павел Кузнецов
Аннотация: <span class='lineQuote level1'>GR&gt;Какой смысл несёт модификатор static для:</span><br /> <span class='lineQuote level1'>GR&gt;1) переменных, объявленных внутри функции ???</span><br /> <span class='lineQuote level1'>GR&gt;2) глобальных объектов ???</span><br /> <br /> static -- "перегруженное" ключевое слово C++.<br /> <br /> 1) При объявлении члена класса (функции или переменной) ключевое слово static означает, что этот член класса является стат...

Ключевые слова:
Автор: Павел Кузнецов
Аннотация: Undead,<br /> <br /> <pre class='c'><code>&gt; mem_fun( SomeClass::SomeFunction )</code></pre><br /> <span class='lineQuote level1'>&gt; Ведь имя функции само по себе является указателем</span><br /> <br /> [list]<br /> <li /> Имя функции само по себе указателем не является, но, в целях совместимости с C, любое выражение, обозначающее "обычную" функцию (не функцию-член), может быть неявно ...

Ключевые слова:
Автор: Павел Кузнецов
Аннотация: <span class='lineQuote level1'>К&gt; Я правильно понимаю, что c-style cast &mdash; это компилятор </span><br /> <span class='lineQuote level1'> К&gt; последовательно пробует сделать function cast, static_cast, </span><br /> <span class='lineQuote level1'> К&gt; а если не получилось &mdash; то reinterpret_cast ?</span><br /> <br /> Почти.<br /> <br /> function cast с одним аргументом определяется как раз через c-style cast, поэтому его, вообще, рассматривать не...

Ключевые слова:
Автор: Андрей Тарасевич
Аннотация: <span class='lineQuote level1'>А&gt;Какая разница между</span><br /> <br /> <pre class='c'><code>A *ptr = <span class='kw'>new</span> B();</code></pre><br /> <span class='lineQuote level1'>А&gt;и </span><br /> <pre class='c'><code>A *ptr = <span class='kw'>new</span> B;</code></pre><br /> В первом случае: выполняется value-initialization. Во втором случае: для не-POD класс типов выполняется default-initialization, а для остальных типов вообще никакой инициализации не делается.<br /> <br /> ...

Ключевые слова:
Автор: Александр Насонов
Перевод: Алифанов Андрей
Источник: RSDN Magazine #3-2004
Аннотация: Статья о решении проблем, возникающих в, казалось бы, тривиальных ситуациях при использовании mixin-класса.

Ключевые слова:
Автор: Андрей Тарасевич
Аннотация: Здравствуйте, Bell, Вы писали:<br /> <span class='lineQuote level1'><br /> B&gt;В данном да. Но ИМХО всегда следует придеживаться определенных правил. При программировании на С++ самодисциплина играет далеко не самую последнюю роль.</span><br /> <br /> Правило "Не делать наследования от классов без виртуального деструктора" является одним из тех ложных правил...

Ключевые слова:
Автор: Павел Кузнецов
Аннотация: Здравствуйте, KPavel, Вы писали:<br /> <span class='lineQuote level1'><br /> K&gt; Определяется ли порядок разрушения статических и глобальных объектов</span><br /> <span class='lineQuote level1'>K&gt; порядком инициализации? Если да, то как &mdash; LIFO?</span><br /> <br /> Именно так. При этом, гарантируется, что разрушение будет происходить именно в таком порядке,<br /> независимо от того, в каких единицах транс...

Ключевые слова:
Автор: Гайфулин Руслан
Источник: RSDN Magazine #1-2009
Аннотация: В статье описывается быстрый и легкий способ определить, в какой последовательности будут вызываться конструкторы классов в иерархии любой сложности.

Ключевые слова:
Автор: Алексей Серебряков
Источник: RSDN Magazine #2-2008
Аннотация: Ошибки, связанные с форматом строки, могут позволить злоумышленнику получить контроль над системой. Статья описывает примеры ошибочного использования printf()-подобных функций, а также возможные последствия таких ошибок.

Ключевые слова: printf
Автор: MaximE
Аннотация: ethan hunt wrote:<br /> <span class='lineQuote level1'><br /> &gt; Господа,</span><br /> <span class='lineQuote level1'>&gt; извиняюсь за тупость, но почему в отдельный поток можно кидать только статическую функцию-член класса. До конца не понимаю (может из-за недосыпания).</span><br /> <br /> Потому, что статическая функция-член имеет такой же тип, как и обычная ф-ция (в отличее от нестатической фун-ции...

Ключевые слова:
Автор: LaptevVV
Аннотация: Здравствуйте, nap2k, Вы писали:<br /> <span class='lineQuote level1'><br /> N&gt;Как в С++ реализуется сабж (типа как в sprintf())</span><br /> Почитайте это.<br /> <br /> [q]<br /> Язык C++ вслед за С позволяет писать функции с переменным числом параметров. Одним из простых примеров может служить функция, вычисляющая среднее арифметическое своих аргументов. Другой уже...

Ключевые слова:
Автор: Валерий Лаптев
Источник: RSDN Magazine #4-2004
Аннотация: В этой статье рассказывается о методах отделения реализации шаблона от его интерфейсной части и о том, как можно заставить это работать на популярных компиляторах наподобие MS Visual C++.

Ключевые слова: templates
Автор: Erop
Аннотация: Здравствуйте, xexe2, Вы писали:<br /> <span class='lineQuote level1'><br /> X&gt;Уважаемый ол, чему же именно равен размер объекта в куче?</span><br /> <br /> Собственно сначала отвечу про sizeof<br /> <br /> На самом деле для любого типа в C++ можно вычислить, кроме sizeof ещё один параметр -- выравнивание.<br /> Выравнивание -- это число, которому должны быть кратны смеще...

Ключевые слова:
Автор: Кодт
Аннотация: Здравствуйте, Аноним, Вы писали:<br /> <span class='lineQuote level1'><br /> А&gt;И в чем их смысл? В частности char_traits, например.</span><br /> <br /> В расширении, группировке и обобщении инструментария, относящегося к тому или иному типу.<br /> <br /> Допустим, у нас есть некий класс T, и нам потребовалось добавить функциональность &mdash; приведение к целому и обратно...

Ключевые слова:

STL

Автор: Павел Кузнецов
Аннотация: Wind:<br /> <span class='lineQuote level1'><br /> &gt; std::map &lt;int, СЛОЖНАЯ_СТРУКТУРА&gt; &lt;...&gt; задача удаления не нужных записей &lt;...&gt;</span><br /> <span class='lineQuote level1'>&gt; 1) Перебираю каждый элемент списка на соответствие некоторым условиям</span><br /> <span class='lineQuote level1'>&gt; 2) Встретился элемент, который нужно удалить &mdash; удалил его и продолжил искать далее</span><br /> <span class='lineQuote level1'>&gt; Но вот незадача, после удаления элемента итерат...</span>

Ключевые слова:
Автор: saproj
Аннотация: Здравствуйте, Tuo_Bellas, Вы писали:<br /> <span class='lineQuote level1'><br /> T_B&gt;VC8, XP SP2</span><br /> <br /> [ccode]<br /> #include &lt;iostream&gt;<br /> #include &lt;fstream&gt;<br /> <br /> int main()<br /> {<br /> std::ofstream os("тест.txt"); // (*)<br /> if (os)<br /> {<br /> os &lt;&lt; "test";<br /> }<br /> <br /> std::ofstream osW(L"тест.txt"); // (**) Note unicode here<br /> if (osW)<br /> {<br /> osW &lt;&lt; "te...

Ключевые слова:
Автор: Михаил Гусаров aka MAG
Аннотация: Рассуждения на тему обобщения некоторых конструкций STL и неполной совместимости компиляторов со стандартом C++

Ключевые слова:
Автор: Роман Хациев
Аннотация: Если вы пытались работать с экземплярами классов STL, передавая их в DLL, или получая оттуда, а потом бросили это занятие из-за непонятных ошибок, возникающих в вашей программе, то эта заметка для вас. Даже если видимых проблем в вашей программе нет, то все равно прочитайте эту заметку, чтобы знать что делать, когда они появятся :)

Ключевые слова:
Автор: Павел Кузнецов
Аннотация: Вот результаты каких-то старых тестов, которые я писал при сравнении Dinkum C++ Std Library и STLport для нашей конторы. В качестве элементов — std::pair&lt;int, int&gt;. Компилятор VC++7.0 aka .NET, времена условные, в тиках процессора. Если к теме будет проявлен интерес — можно будет черкнуть статейку с...

Ключевые слова:
Автор: Алексей Семенюк
Источник: RSDN Magazine #2-2004
Аннотация: В статье приводится пример реализации нестандартного контейнера, позволяющего обеспечить приемлемую скорость доступа к произвольному элементу и вставки/удаления в произвольную позицию.

Ключевые слова:
Автор: Odi$$ey
Аннотация: <span class='lineQuote level1'>OE&gt;что-то я туплю к вечеру &mdash; есть вектор, я в нем чем-то ищу, получаю iterator it, чтоб узнать индекс элемента делаю it &mdash; vect.begin(), теперь тоже для reverse_iterator &mdash; ищу от rbegin() до rend(), получаю reverse_iterator rit &mdash; что от чего надо отнять чтоб узнать индекс элемента на который указыва...</span>

Ключевые слова:
Автор: Павел Кузнецов
Аннотация: <span class='lineQuote level4'>А&gt;&gt;&gt;&gt;В MSVC 6.0, к сожалению, можно только специализировать std::greater для своего класса. Предикат передать не получится (если, конечно, не править хедер руками).</span><br /> <span class='lineQuote level1'><br /> peter&gt;Вот он меня нафиг и посылает :no:</span><br /> <span class='lineQuote level1'>peter&gt;Где править header?</span><br /> <br /> Заголовок &lt;list&gt; (измененные/добавленные строки выделены):<br /> [...

Ключевые слова:
Автор: Павел Кузнецов
Аннотация: <span class='lineQuote level1'>A&gt;В МСДНе не понятно написано <img border='0' width='15' height='15' src='../Forum/images/frown.gif' /></span><br /> <br /> Класс или шаблон, аналогичный std::vector по интерфейсу, сделать "потокобезопасным" сам по себе невозможно по принципиальным соображениям. Например:<br /> [c]<br /> void f(std::vector&lt;int&gt;&amp; v)<br /> {<br /> std::size_t sz = v.size();<br /> for (std::size_t i = 0; i &lt; sz; ++i)<br /> std...

Ключевые слова:
Автор: Igor Semenov
Источник: RSDN Magazine #1-2008
Аннотация: В этой статье приводится обзор инструментов, позволяющих избежать части проблем, связанных с использованием динамической памяти в C++. Описанные ниже инструменты и методики не являются панацеей от проблем управления памятью, они всего лишь способны облегчить жизнь программисту при условии правильного их использования. Эти инструменты носят общее название «умные указатели» («smart pointers»), что подразумевает их семантическое сходство с обыкновенными указателями C++.

Ключевые слова: smartptr

Руководство по стандартной библиотеке шаблонов (STL)

Авторы: Александр Степанов
Менг Ли
Перевод: Алексей Суханов
Андрей Кутырин
Григорий Александрович Милонов
Аннотация: Стандартная Библиотека Шаблонов предоставляет набор хорошо сконструированных и согласованно работающих вместе обобщённых компонентов C++. Особая забота была проявлена для обеспечения того, чтобы все шаблонные алгоритмы работали не только со структурами данных в библиотеке, но также и с встроенны...

Ключевые слова:
Аннотация: Эти примеры демонстрируют использование нового продукта STL<ToolKit> от компании ObjectSpace. STL<ToolKit> - это самый простой способ использования STL, который работает на большинстве комбинаций платформ/компиляторов, включая cfront, Borland, Visual C++, Set C++, ObjectCenter и последние комп...

Ключевые слова:

Boost

Автор: SchweinDeBurg
Аннотация: Здравствуйте, neFFy, Вы писали:<br /> <span class='lineQuote level2'><br /> H_C&gt;&gt;Люди, где можно мкачать уже скомпиленый boost. Я слышал, что есть сайт с инсьталяхой под Windows.</span><br /> <br /> <a class="m" href="http://www.boost-consulting.com/products/free" target="_blank">здесь</a><br /> <span class='lineQuote level1'><br /> FF&gt;он что то еще докачивает?.</span><br /> <br /> Да, именно так. <img border='0' width='15' height='15' src='../Forum/images/smile.gif' /> Сначала предлагает выбрать варианты библи...

Ключевые слова:
Автор: Bjorn Karlsson
Перевод: Алексей Кирюшкин
Источник: Beyond the C++ Standard Library: An Introduction to Boost
Аннотация: Рассматриваются все типовые случаи применения bind - связывание свободных функций, функций-членов класов, переменных-членов, виртуальных функций, а также функциональная композиция. На простом примере поясняется идея, лежащая в основе реализации bind.

Ключевые слова: boost,bind
Автор: Cyberax
Аннотация: Ignoramus wrote:<br /> <span class='lineQuote level1'>&gt; I&gt;&gt;Однако линкер вижуал студио по-прежнему ругается. Как заставить его </span><br /> <span class='lineQuote level1'>&gt; "увидеть" либ-файлы?</span><br /> <span class='lineQuote level1'>&gt; K&gt;прописать в свойствах либо проекта либо IDE пути к либам.</span><br /> <span class='lineQuote level1'>&gt; Каждую либу отдельно? Которые в разных папочках рассортированы? </span><br /> <br /> bjam при инсталяции копирует все либы в одну папку...

Ключевые слова:
Автор: Алексей Мартынов
Аннотация: Здравствуйте, denaturat, Вы писали:<br /> <span class='lineQuote level1'><br /> D&gt;1. Строка </span><br /> <span class='lineQuote level1'>D&gt;boost::filesystem::path mypath("C:\\test.txt");</span><br /> <span class='lineQuote level1'>D&gt;кидает исключение filesystem_error с флагом other_error</span><br /> <span class='lineQuote level1'>D&gt;то же самое, если сначала сделать так:</span><br /> <span class='lineQuote level1'>D&gt;boost::filesystem::path mypath;</span><br /> <span class='lineQuote level1'>D&gt;а только затем так:</span><br /> <span class='lineQuote level1'>D&gt;mypath = "C:\\test.txt";</span><br /> <br /> Хм, чис...

Ключевые слова:
Автор: Григорьев Вячеслав Владимирович
Источник: RSDN Magazine #1-2010
Аннотация: В статье описывается внутреннее строение boost-библиотеки signals2. Описываются архитектурные решения, применённые в ней. Приводятся сигнатуры классов, их назначение. Объясняется взаимодействие различных компонентов при выполнении вызовов пользователя.

Ключевые слова: boost; signals2; signal; slot; метапрограммирование; отложенный вызов
Автор: Dog
Аннотация: <span class='lineQuote level1'>R&gt;<a class="m" href="http://www.boost.org" target="_blank">где она находится</a> я нашел, меня интересовало что </span><br /> <span class='lineQuote level1'>R&gt;это и с чем её едят</span><br /> ... цитирую при жизни <img border='0' width='15' height='15' src='../Forum/images/biggrin.gif' /><br /> <br /> [q]<br /> ... boost заметно удешевляет разработку продуктов, а также близкое знакомство разработчиков с этой библиотекой воспитывает, учит их правильному минималистичес...

Ключевые слова:
Автор: Pavel Chikulaev
Аннотация: Здравствуйте, Ароан, Вы писали:<br /> <span class='lineQuote level2'><br /> PC&gt;&gt;Нет нельзя. Т.к. ты уже используешь буст вместо написания велосипеда можешь использовать <a class="m" href="http://www.boost.org/boost/lambda/construct.hpp" target="_blank">http://www.boost.org/boost/lambda/construct.hpp</a> (в хэдере ничего лишнего из boost.lambda).</span><br /> <span class='lineQuote level1'><br /> А&gt;Следующий код выдает ошибку 'result_type' : is not a member of 'boost::lambd...</span>

Ключевые слова:
Автор: Igor Semenov
Источник: RSDN Magazine #1-2008
Аннотация: В этой статье приводится обзор инструментов, позволяющих избежать части проблем, связанных с использованием динамической памяти в C++. Описанные ниже инструменты и методики не являются панацеей от проблем управления памятью, они всего лишь способны облегчить жизнь программисту при условии правильного их использования. Эти инструменты носят общее название «умные указатели» («smart pointers»), что подразумевает их семантическое сходство с обыкновенными указателями C++.

Ключевые слова: smartptr

Динамически занимаемая память

Автор: Алексей Ширшов
Аннотация: Исходные тексты классов

Ключевые слова:
Автор: Алексей Ширшов
Источник: RSDN Magazine #3
Аннотация: Эти классы родились по многочисленным просьбам трудящихся программистов сообщества RSDN. Они не являются аналогами CAutoBufBase и CAutoBuf<> соответственно, и предназначены совершенно для других задач. Они могут серьезно упростить код, который должен работать с большими массивами данных, затрачивая минимум ресурсов (памяти). Другими словами, память будет выделяться тогда, когда нужно, и в том объеме, в котором нужно.

Ключевые слова: SEH,CVirtualBufBase,CVurtualBuf<>,EXCEPTION_EXECUTE_HANDLER,EXCEPTION_CONTINUE_SEARCH,EXCEPTION_CONTINUE_EXECUTION
Автор: Чистяков Владислав
Источник: RSDN Magazine #1
Аннотация: Демонстрационный проект (VC7, C#)

Ключевые слова:
Автор: Андрей Тарасевич
Аннотация: <span class='lineQuote level1'>_L_&gt;В чем разница? Кроме как синтаксиса обращения. Единственное преимущество вижу в том, что его удалить можно в любой момент. Но сколько ни смотрю исходники программ везде вижу:</span><br /> <span class='lineQuote level1'>_L_&gt;<pre class='c'><code>_L_&gt;CHTMLDoc* pHTMLDoc = new CHTMLDoc; _L_&gt;</code></pre></span><br /> <span class='lineQuote level1'>_L_&gt;Потому и возник ламерский вопрос. <img border='0' width='15' height='15' src='../Forum/images/smile.gif' /></span><br /> <br /> Динамическа...

Ключевые слова:
Автор: Михаил Чащин
Источник: RSDN Magazine #1
Аннотация: В данной статье мы рассмотрим обобщённую реализацию сборки мусора на С++. Будут обсуждены два конкретных алгоритма сборки мусора – “Mark-Sweep” и “Mark-Compact”, и их реализация. Мы также рассмотрим ограничения, которые накладываются на приложения при использовании сборки мусора, и изменения в компи...

Ключевые слова:
Автор: Станислав Михайлов
Источник: RSDN Magazine #1
Аннотация: Иногда на этапе окончательной отладки кажется, что программа работает безошибочно… но как-то слишком медленно. Конечно, можно посоветовать заказчику сделать очередной upgrage, но вряд ли подобное предложение его обрадует. Поэтому, лучше для начала попытаться понять, что же приводит к замедлению рабо...

Ключевые слова:
Автор: Андрей Тарасевич
Аннотация: <span class='lineQuote level1'>E&gt;Логика: <b>мы</b> не можем ..., а <b>компилятор</b> &mdash; может, меня и смутила.</span><br /> <span class='lineQuote level1'>E&gt;Вопрос произошел от указанной темы об определении размера массива, поэтому и стало интересно, кто чего может. То есть я перефразировал бы свою мысль следующим образом: почему компилятор имеет средства для определения р...</span>

Ключевые слова:
Автор: Eugene Kilachkoff
Аннотация: Здравствуйте, unz0r, Вы писали:<br /> <span class='lineQuote level1'><br /> U&gt;В смысле? Я сделал маленький тестовый проект &mdash; в нем malloc(1) ест 16 байт. Но в большом проекте &mdash; 4Kb.</span><br /> <span class='lineQuote level1'>U&gt;Но вообще что-то непонятное происходит. Если я _переименовываю_ полученный .exe файл проекта, например на X.exe, то магическим образом malloc(1) вместо 4Kb ...</span>

Ключевые слова:

Размещение объектов в оперативной памяти. Понятие указателя

Автор: Костарев Александр Николаевич
Источник: RSDN Magazine #2-2010
Аннотация: Рассмотрены вопросы организации памяти в С++, базовые принципы управления ею, основы работы с указателями. Представление рассматриваемых конструкций и понятий осуществляется с позиций их реализации, внутреннего устройства, что позволяет не только запомнить, как работает тот или иной оператор, та или иная конструкция, но и понять, почему они работают именно так.

Ключевые слова: C++; объекты; указатели; память; стек; динамическая память; утечка памяти; new; delete;
Автор: Костарев Александр Николаевич
Источник: RSDN Magazine #3-2010
Аннотация: Рассмотрены вопросы организации памяти в С++, базовые принципы управления ею, основы работы с указателями. Представление рассматриваемых конструкций и понятий осуществляется с позиций их реализации, внутреннего устройства, что позволяет не только запомнить, как работает тот или иной оператор, та или иная конструкция, но и понять, почему они работают именно так.

Ключевые слова: C++; объекты; указатели; массивы; память; стек; динамическая память; утечка памяти; new; delete;
Автор: Igor Semenov
Источник: RSDN Magazine #1-2008
Аннотация: В этой статье приводится обзор инструментов, позволяющих избежать части проблем, связанных с использованием динамической памяти в C++. Описанные ниже инструменты и методики не являются панацеей от проблем управления памятью, они всего лишь способны облегчить жизнь программисту при условии правильного их использования. Эти инструменты носят общее название «умные указатели» («smart pointers»), что подразумевает их семантическое сходство с обыкновенными указателями C++.

Ключевые слова: smartptr

Макросы

Автор: Александр Шаргин
Аннотация: В языке C++ есть восьмеричные, десятичные и шестнадцатеричные константы. А двоичных - нет. Тем не менее, при помощи препроцессора можно соорудить макрос, который позволит нам смоделировать такие константы. Основная идея - преобразовывать восьмеричную константу в двоичную, выделяя из неё отдельные ци...

Ключевые слова:
Авторы: Игорь Ткачёв
Александр Шаргин
Источник: RU.VISUAL.CPP
Аннотация: Этот способ предложил Dmitry A. Senkevich (2:5020/1300) в конференции RU.VISUAL.CPP, сорвав при этом бурные и продолжительные аплодисменты.

Ключевые слова:
Автор: Андрей Тарасевич
Аннотация: Здравствуйте, Аноним, Вы писали:<br /> <span class='lineQuote level1'><br /> А&gt;В статье по реализации делегатов на С++ надо было получить лексему через макросы:</span><br /> <span class='lineQuote level1'><br /> А&gt;[ccode]</span><br /> <span class='lineQuote level1'>А&gt;#define SUFFIX 5</span><br /> <span class='lineQuote level1'><br /> А&gt;#define COMBINE(a,b) COMBINE1(a,b)</span><br /> <span class='lineQuote level1'>А&gt;#define COMBINE1(a,b) a##b</span><br /> <span class='lineQuote level1'><br /> А&gt;#define I_DELEGATE COMBINE(IDelegate, SUFFIX)</span><br /> <span class='lineQuote level1'>А&gt;#def...</span>

Ключевые слова:

Манипуляции с битами

Автор: Павел Кузнецов
Аннотация: <span class='lineQuote level1'>VD&gt;Можно ли без цикла посчитать количество битов требуемое для представления числа?</span><br /> <span class='lineQuote level1'>VD&gt;Ну, то есть вместо этого:</span><br /> <span class='lineQuote level1'><br /> VD&gt;<pre class='c'><code>VD&gt;<span class='kw'>int</span> iResidue = <span class='kw'>sizeof</span>(array) / <span class='kw'>sizeof</span>(array[0]); VD&gt;<span class='kw'>for</span>(; iResidue; iBits++) VD&gt;{ VD&gt; iResidue &gt;&gt;= 1; VD&gt; iBits++; VD&gt;} VD&gt;</code></pre></span><br /> <span class='lineQuote level1'><br /> VD&gt;Написать константное выр...</span>

Ключевые слова:

Массивы

Автор: Павел Кузнецов
Аннотация: Здравствуйте, kliff, Вы писали:<br /> <br /> <b>const char * sz = "TEXT";</b><br /> <span class='lineQuote level1'>K&gt;выделяется память под указатель на строку находящуюся в отсеке RO (память на строку выделена на этапе компиляции, а под переменная в рантайме на стеке)</span><br /> <br /> Около того. Литерал "TEXT" <i>может быть</i> размещен в read-only памяти, ...

Ключевые слова:
Автор: Андрей Тарасевич
Аннотация: Здравствуйте, CompileError, Вы писали:<br /> <span class='lineQuote level1'><br /> CE&gt;Правда ли, что если создать массив объектов, то при его удалении с помощью операции delete не будут вызваны деструкторы для каждого из элементов массива (обязательно надо использовать delete[ ] )? </span><br /> <br /> Есль речь идет о массиве в динамической памяти, то уда...

Ключевые слова:
Автор: Андрей Тарасевич
Аннотация: <span class='lineQuote level1'>А&gt;Вот этот код не компилируется:</span><br /> <span class='lineQuote level1'><br /> А&gt;[ccode]#include "stdafx.h"</span><br /> <span class='lineQuote level1'><br /> А&gt;int matrix[2][2] =</span><br /> <span class='lineQuote level1'>А&gt;{</span><br /> <span class='lineQuote level1'>А&gt; 1, 2,</span><br /> <span class='lineQuote level1'>А&gt; 3, 4</span><br /> <span class='lineQuote level1'>А&gt;};</span><br /> <span class='lineQuote level1'><br /> А&gt;void test(int *pM)</span><br /> <span class='lineQuote level1'>А&gt;{</span><br /> <span class='lineQuote level1'>А&gt; printf("%d", pM[1][0]); // error C2109</span><br /> <span class='lineQuote level1'>А&gt;}</span><br /> <span class='lineQuote level1'><br /> А&gt;int _tmain(int argc, _TCHAR* argv[])</span><br /> <span class='lineQuote level1'>А&gt;{</span><br /> <span class='lineQuote level1'>А&gt; test(matrix); // error C2664</span><br /> <span class='lineQuote level1'>А&gt; retur...</span>

Ключевые слова:

Библиотеки

Автор: Павел Кузнецов
Аннотация: <span class='lineQuote level1'>А&gt;Столкнулся с проблемой которую самостоятельно уже не могу решить.</span><br /> <span class='lineQuote level1'><br /> А&gt;Проблема:</span><br /> <span class='lineQuote level1'>А&gt;Есть статический экземляр класса, задача которого инициализировать данные при загрузке программы, пока файл в котором обьявлен этот экземпляр находится непосредственно в проекте, все работает на ура, но как только ...</span>

Ключевые слова:
Автор: Васильев Сергей Александрович
Аннотация: В статье рассказывается о первом этапе разработки семейства кроссплатформенных библиотек UNIO для унифицированного взаимодействия с устройствами ввода-вывода. Рассматривается реализация новой библиотеки UNIPRINT для унифицированного взаимодействия с устройствами печати.

Ключевые слова: кроссплатформенность; унификация; интерфейс программирования; внешний интерфейс; устройство ввода-вывода; библиотека; класс; объект; функция; шаблон; C++; STL; Win API; CUPS

Строки в С и С++

Автор: Сергей Аристов
Аннотация: Это первая часть, в которой обсуждаются «традиционные» строки в С. В С++ существуют более удобные механизмы для работы со строковыми данными, эти механизмы рассматриваются во второй части статьи. А зачем вообще обсуждать неудобные С-строки, если есть С++? К сожалению, совсем забыть о строках в стиле С нельзя по двум причинам: 1. существует большое библиотек (например, API операционных систем) работающих именно с С-строками 2. строковые классы в С++ все равно основаны на традиционных С-строках, и если мы хотим разобраться в том, как они работают, нам придется понимать их основы.

Ключевые слова:
Автор: Павел Кузнецов
Аннотация: <span class='lineQuote level1'>Y&gt; Мне надо сравнить два std::string без учета регистра. Я написал свою</span><br /> <span class='lineQuote level1'>Y&gt; функцию сравнения, все вроде Ok, но меня мучает такой вопрос: есть ли</span><br /> <span class='lineQuote level1'>Y&gt; стандартные средства (библиотечные) для такого сравнения?</span><br /> <br /> Если подробно и "правильно", там все очень долго и сложно, т.к. преобразование символов<br /> ...

Ключевые слова:

Язык Си в вопросах и ответах.

Автор: Кодт
Аннотация: <b>Предисловие составителя</b><br /> <br /> Для всех, кто задавался вопросами о странностях языков Си и C++. Must read!<br /> <br /> Несмотря на то, что год издания &mdash; 1995. Книга актуальна, потому что количество граблей &mdash; монотонно возрастающая функция <img border='0' width='15' height='15' src='../Forum/images/smile.gif' /><br /> <br /> Главы оформлены как ветки этой темы. Разворачивайте и смотрит...

Ключевые слова:

1. Нулевые указатели

Автор: Кодт
Аннотация: <i>От составителя.</i><br /> <br /> Эта глава обсуждает внутреннюю реализацию нулевых указателей. Для большинства, наверное, она имеет лишь академический характер, так сказать, для расширения кругозора (поскольку на популярных платформах NULL &mdash; это 0). Тем не менее, если вы натолкнулись на "странности" с нуле...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Расскажите все-таки о пресловутых нулевых указателях.<br /> <br /> <b>Ответ:</b><br /> <br /> Для каждого типа указателей существует (согласно определению языка) <b>особое значение</b> &mdash; "нулевой указатель", которое отлично от всех других значений и не указывает на какой-либо объект или функцию. Таким об...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Как "получить" нулевой указатель в программе?<br /> <br /> <b>Ответ:</b><br /> <br /> В языке С константа 0, когда она распознается как указатель, преобразуется компилятором в нулевой указатель. То есть, если во время инициализации, присваивания или сравнения с одной стороны стоит переменная или выражени...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Что такое NULL и как он определен с помощью #define?<br /> <br /> <b>Ответ:</b> <br /> Многим программистам не нравятся нули, беспорядочно разбросанные по программам.<br /> По этой причине макрос препроцессора NULL определен в &lt;stdio.h&gt; или &lt;stddef.h&gt; как значение 0 (или (void *) 0, об этом значении пого...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Как #define должен определять NULL на машинах, использующих ненулевой двоичный код для внутреннего представления нулевого указателя?<br /> <br /> <b>Ответ:</b><br /> Программистам нет необходимости знать внутреннее представление(я) нулевых указателей, ведь об этом обычно заботится компилятор. Если м...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Пусть NULL был определен следующим образом:<br /> <pre class='c'><code> <span class='kw'>#define</span> NULL ((<span class='kw'>char</span> *)0)</code></pre><br /> Ознает ли это, что функциям можно передавать NULL без преобразования типа?<br /> <br /> <b>Ответ:</b><br /> В общем, нет. Проблема в том, что существуют компьютеры, которые используют различные внутренние представлен...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Я использую макрос<br /> <pre class='c'><code> <span class='kw'>#define</span> Nullptr(type) (type *)0</code></pre><br /> который помогает задавать тип нулевого указателя.<br /> <br /> <b>Ответ:</b><br /> Хотя этот трюк и популярен в определенных кругах, он стоит немного.<br /> Он не нужен при сравнении и присваивании; см. вопрос 1.2. Он даже не экономит букв...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Корректно ли использовать сокращенный условный оператор if(p) для проверки того, что указатель ненулевой? А что если внутреннее представление для нулевых указателей отлично от нуля?<br /> <br /> <b>Ответ:</b><br /> Когда С требует логическое значение выражения (в инструкциях if, while, for, do и для...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Если "NULL" и "0" эквивалентны, то какую форму из двух использовать?<br /> <br /> <b>Ответ:</b><br /> Многие программисты верят, что "NULL" должен использоваться во всех выражениях, содержащих указатели как напоминание о том, что значение должно рассматриваться как указатель.<br /> Другие же чувствуют, ч...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Но не лучше ли будет использовать NULL (вместо 0) в случае, когда значение NULL изменяется, быть может, на компьютере с ненулевым внутренним представлением нулевых указателей?<br /> <br /> <b>Ответ:</b><br /> Нет. Хотя символические константы часто используются вместо чисел из-за того, что числа мог...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Я в растерянности. Гарантируется, что NULL равен 0, а нулевой указатель нет?<br /> <br /> <b>Ответ:</b><br /> Термин "null" (нулевой) или "NULL" может не совсем обдуманно использоваться в нескольких смыслах:<br /> <br /> [list=1]<br /> <li /> <b>Нулевой указатель как абстрактное понятие языка</b>, определенное в [url...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Почему так много путаницы связано с нулевыми указателями? Почему так часто возникают вопросы?<br /> <br /> <b>Ответ:</b><br /> Программисты на С традиционно хотят знать больше, чем это необходимо для программирования, о внутреннем представлении кода.<br /> Тот факт, что внутреннее представление нулевых у...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Я все еще в замешательстве. Мне так и не понятна возня с нулевыми указателями.<br /> <br /> <b>Ответ:</b><br /> Следуйте двум простым правилам:<br /> <br /> <b>1.</b> Для обозначения в исходном тексте нулевого указателя, используйте "0" или "NULL".<br /> <br /> <b>2.</b> Если "0" или "NULL" используются как фактические...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Учитывая всю эту путаницу, связанную с нулевыми указателями, не лучше ли просто потребовать, чтобы их внутреннее представление было нулевым?<br /> <br /> <b>Ответ:</b><br /> Если причина только в этом, то поступать так было бы неразумно, так как это неоправданно ограничит конкретную реализацию, кото...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Ну а если честно, на какой-нибудь реальной машине используются ненулевые внутренние представления нулевых указателей или разные представления для указателей разных типов?<br /> <br /> <b>Ответ:</b><br /> Серия Prime 50 использует сегмент 07777, смещение 0 для нулевого указателя, по крайней мере, для...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Что означает ошибка во время исполнения "null pointer assignment" (запись по нулевому адресу). Как мне ее отследить?<br /> <br /> <b>Ответ:</b><br /> Это сообщение появляется только в системе MS-DOS <i>(и в DOS-сессиях под Windows -- Кодт)</i> (см., следовательно, раздел 16) и означает, что произош...

Ключевые слова:

2. Указатели и массивы

Автор: Кодт
Аннотация: 2.1. В одном файле у меня есть описание char a[6], а в другом я объявил extern char *a.<br /> Почему это не работает?<br /> <br /> 2.2. Но я слышал, что char a[] эквивалентно char *a.<br /> <br /> 2.3. Тогда что же понимается под "эквивалентностью указателей и массивов" в С?<br /> <br /> 2.4. Тогда почему объявления указателей и масс...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> В одном файле у меня есть описание char a[6], а в другом я объявил extern char *a. Почему это не работает? <br /> <br /> <b>Ответ:</b><br /> Декларация extern char *a просто не совпадает с текущим определением. <br /> Тип "Указатель-на-тип-Т" не равен типу "массив-типа-Т". Используйте extern char a[].

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Но я слышал, что char a[] эквивалентно char *a.<br /> <br /> <b>Ответ:</b> <br /> Ничего подобного. (То, что Вы слышали, касается формальных параметров функций, см. вопрос 2.4.)Массивы &mdash; не указатели. Объявление массива "char a[6];" требует определенного места для шести символов, которое будет извес...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Тогда что же понимается под "эквивалентностью указателей и массивов" в С?<br /> <br /> <b>Ответ:</b><br /> Большая часть путаницы вокруг указателей в С происходит от непонимания этого утверждения. "Эквивалентность" указателей и массивов не позволяет говорить не только об идентичности, но и взаимозам...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Тогда почему объявления указателей и массивов взаимозаменяемы в качестве формальных параметров?<br /> <br /> <b>Ответ:</b><br /> Оператор sizeof сообщает размер указателя, который на самом деле<br /> получает функция. (см. вопрос 2.4).<br /> <br /> Так как массивы немедленно превращаются в указатели, массив на сам...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Как массив может быть значением типа lvalue, если нельзя присвоить ему значение?<br /> <br /> <b>Ответ:</b><br /> Стандарт ANSI C определяет "модифицируемое lvalue", но массив к этому не относится.<br /> <br /> Смотри: ANSI Разд. 3.2.2.1 c. 37.

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Почему sizeof неправильно определяет размер массива, который передан функции в качестве параметра?<br /> <br /> <b>Ответ:</b><br /> Оператор sizeof сообщает размер указателя, который на самом деле получает функция. (см. <a class=" tips m" href="https://rsdn.orgrsdn.ru/forum/?mid=177696" rel="#qROCcj" title="2.4. Взаимозаменяемость в качестве формальных параметров">вопрос 2.4<div class="tooltip" id="qROCcj">Автор: Кодт<br />Дата: 20.01.03</div></a>).

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Кто-то объяснил мне, что массивы это на самом деле только постоянные указатели.<br /> <br /> <b>Ответ:</b><br /> Это слишком большое упрощение. Имя массива &mdash; это константа, следовательно, ему нельзя присвоить значение, но массив &mdash; это не указатель, как должно быть ясно из ответа на [url=<a class="m" href="https://rsdn.orgrsdn.ru/" title="">www.rsdn.ru/</a>...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> C практической точки зрения в чем разница между массивами и указателями?<br /> <br /> <b>Ответ:</b><br /> <br /> <b>Массивы</b> автоматически резервируют память, но не могут изменить расположение в памяти и размер.<br /> <br /> <b>Указатель</b> должен быть задан так, чтобы явно указывать на выбранный участок памят...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Я наткнулась на шуточный код, содержащий "выражение" 5["abcdef"].<br /> Почему такие выражения возможны в С?<br /> <br /> <b>Ответ:</b><br /> <br /> Да, Вирджиния, индекс и имя массива можно переставлять в С.<br /> Этот забавный факт следует из определения индексации через указатель, а именно, <b>a[e]</b> идентичн...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Мой компилятор ругается, когда я передаю двумерный массив функции, ожидающей указатель на указатель.<br /> <br /> <b>Ответ:</b><br /> <br /> Правило, по которому массивы превращаются в указатели, не может применяться рекурсивно. Массив массивов (т.е. двумерный массив в С) превращается в указатель на масс...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Как писать функции, принимающие в качестве параметра двумерные массивы, "ширина" которых во время компиляции неизвестна?<br /> <br /> <b>Ответ:</b><br /> <br /> Это непросто. Один из путей &mdash; передать указатель на элемент [0][0] вместе с размерами и затем симулировать индексацию "вручную":<br /> [c]<br /> f2(int* a...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Как объявить указатель на массив?<br /> <br /> <b>Ответ:</b><br /> <br /> Обычно этого делать не нужно. Когда случайно говорят об указателе на массив, обычно имеют в виду указатель на первый элемент массива.<br /> <br /> Вместо указателя на массив рассмотрим использование указателя на один из элементов массива.<br /> М...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Исходя из того, что ссылки на массив превращаются в указатели, скажите в чем разница для массива<br /> <pre class='c'><code> <span class='kw'>int</span> array[NROWS][NCOLUMNS];</code></pre><br /> между array и &amp;array?<br /> <br /> <b>Ответ:</b><br /> <br /> Согласно ANSI/ISO стандарту C, &amp;array дает указатель типа "указатель-на-массив-Т", на весь массив (Cм. ...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Как динамически выделить память для многомерного массива?<br /> <br /> <b>Ответ:</b><br /> <br /> Лучше всего выделить память для массива указателей, а затем инициализировать каждый указатель так, чтобы он указывал на динамически создаваемую строку. Вот пример для двумерного массива:<br /> [c]<br /> int **array1 =...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Как мне равноправно использовать статически и динамически задаваемые многомерные массивы при передаче их в качестве параметров функциям?<br /> <br /> <b>Ответ:</b><br /> Идеального решения не существует. Возьмем объявления<br /> [c]<br /> int array[NROWS][NCOLUMNS];<br /> int **array1;<br /> int **array2;<br /> int *array3;...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Вот изящный трюк: если я пишу<br /> <pre class='c'><code><span class='kw'>int</span> realarray[10]; <span class='kw'>int</span> *array = &amp;realarray[-1];,</code></pre><br /> то теперь можно рассматривать "array" как массив, у которого индекс первого элемента равен единице.<br /> <br /> <b>Ответ:</b><br /> Хотя этот прием внешне привлекателен (и использовался в старых изданиях кн...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> Я передаю функции указатель, который она инициализирует<br /> <pre class='c'><code>... <span class='kw'>int</span> *ip; f(ip); ... <span class='kw'>void</span> f(ip) <span class='kw'>int</span> *ip; { <span class='kw'>static int</span> dummy = 5; ip = &amp;dummy; }</code></pre><br /> но указатель после вызова функции остается неизменным.<br /> <br /> <b>Ответ:</b><br /> Функция пытается изменить сам указатель, или ...

Ключевые слова:
Автор: Кодт
Аннотация: <b>Вопрос:</b> У меня определен указатель на char, который указывает еще и на int, причем мне необходимо переходить к следующему элементу типа int.<br /> Почему<br /> <pre class='c'><code>((<span class='kw'>int</span> *)p)++;</code></pre><br /> не работает?<br /> <br /> <b>Ответ:</b><br /> В языке С оператор преобразования типа не означает "будем действовать так, как будто э...

Ключевые слова:

Практика

Метапрограммирование средствами шаблонов С++

Автор: Чигринец Владислав Александрович
Аннотация: В статье предложено решение унификации функций доступа к внутренним переменным класса, рассмотрен вопрос локализации в одном файле типов переменных класса. Предложенное решение может быть актуальным для классов, содержащих большое количество внутренних переменных.

Ключевые слова: Шаблонный интерфейс класса; классы свойств; классы стратегий
Автор: IT
Аннотация: <span class='lineQuote level1'>ПА&gt;Ламерский вопрос</span><br /> <br /> Почему ламерский? Нормальный вопрос, который обычно встречается большинству программеров.<br /> <span class='lineQuote level1'><br /> ПА&gt;Есть у меня некая структура (struct).</span><br /> <span class='lineQuote level1'>ПА&gt;Требуется создать файл, куда писать данные в виде этих структур. А также читать. А также перемещаться по файлу.</span><br /> <span class='lineQuote level1'>ПА&gt;Как это сделать? (Плиз ...</span>

Ключевые слова:
Автор: Odi$$ey
Аннотация: <span class='lineQuote level1'>АШ&gt;Хочу сравнить эффективность своего варианта с предложенным. Не сочтите за труд. Пусть входной файл будет в 1Mb.</span><br /> <br /> vc71, release, оптимизация по скорости.<br /> <br /> [ccode]<br /> // file2vect.cpp : Defines the entry point for the console application.<br /> //<br /> <br /> #include "stdafx.h"<br /> #include &lt;Windows.h&gt;<br /> #include...

Ключевые слова:
Автор: korzhik
Аннотация: Здравствуйте, Аноним, Вы писали:<br /> <span class='lineQuote level1'><br /> А&gt;Что-то не могу понять, как коректно решить вот такую задачу:</span><br /> <span class='lineQuote level1'>А&gt;есть текстовый файл, в нем записаны некоторые данные(числа, слова, разделенные пробелами)... Для чтения решил использовать потоки std::ifstream... Мне нужно пропустить(проигнорировать) N первых стро...</span>

Ключевые слова:
Автор: Кодт
Аннотация: Здравствуйте, Зверёк Харьковский, Вы писали:<br /> <span class='lineQuote level1'><br /> ЗХ&gt;<i>В меру идиотский вопрос.</i></span><br /> <span class='lineQuote level1'>ЗХ&gt;Возможен ли сабж? Т.е. возможно ли создать переменную типа FILE*, чтобы все fwrite в нее на самом деле писали в буфер в памяти?</span><br /> <span class='lineQuote level1'><br /> ЗХ&gt;нужен JEPG в памяти; а libjpeg, зараза, либо через FILE*, либо какой-то кошмар...</span>

Ключевые слова: