Спасибо! С параметрами функций, возвращаемом значении функции, а также с объявлениями переменных и псевдонимов все в порядке, это я не трогал. Но вот неполные объявления аргументы шаблона удалил, в моем компиляторе MSVC это не работает, скорее всего ошибка компилятора, возможно в других компиляторах работает, но я не проверял.
У меня вообще какая-то чертовщина. Пример не компилируется, но компилируется такой код: namespace F { void g(){ std::unique_ptr ptry; Y* y = new Y(); ptry.reset(y); } Y y; } Класс Y нигде не определен. То есть компилятор сгенерировал некий пустой класс Y в namespace F. У меня компилятор MSVC. Про шаблоны уберу.
Да, это так. Я сам сильно удивился, когда прочитал об этом в [Meyers1]. Согласен, что пользы от этого не много, практичнее использовать ссылку. Термин «Интеллектуальный указатель» (smart pointer) используется в переводах книг по С++ издательств «И.Д. Вильямс», «Диалектика». Именно они перевели и издали самые известные работы Скотта Мейерса, Герба Саттера и других гуру С++ (например [Meyers2]). Я как-то привык именно к этому варианту.
К сожалению, у меня нет никакого опыта работы с bluray, нет аппаратуры. Единственно, что я могу сказать это то, что в списке протоколов есть bluray, то есть надежда, что ffmpeg сможет прочитать есть. Ну а если сможет прочитать, то вывести - это дело техники. Одно из достоинств ffmpeg - это то, что он не прекращает поддержку старых технологий. Можно попробовать использовать VLC Player, он "сидит" на ffmpeg.
Да, это вариант и неплохой. Здесь мы в очередной раз сталкиваемся с ситуацией, когда в C++ одна и та же цель достигается несколькими способами и наилучший вариант далеко не всегда очевиден. Достоинства const_cast в том, что он "режет глаз", его можно аккуратно инкапсулировать и контролировать, а mutable потенциально влияет на неопределённое количество кода.
Мне кажется, что это рассуждение слишком абстрактно, конкретные задачи могут все поставить на свои места. Главное, чтобы программист знал возможные варианты решения и мог выбрать оптимальные для конкретного случая.
Да, конечно, константность и многопоточность тесно связаны, доступ к константам безопасен из нескольких потоков. Наверное я недостаточно акцентировал на этом моменте, есть только маленький раздел 3.5. Возможно, внесу поправки.
Мне кажется, что константное rvalue (для которых будет выбрана версия const &&) появляется только в одном случае, когда это rvalue является вызовом функции, возвращающей константу. Подобную ситуацию я описал в разделе 5.2.
Для неконстантного контейнера по правилам перегрузки вызовется неконстантная версия этих функций, которые возвращают обычный итератор и вы можете модифицировать элементы контейнера. Для константного контейнера по правилам перегрузки вызовется константная версия этих функций, которые возвращают константный итератор и вы НЕ можете модифицировать элементы контейнера. В C++11 появились сbegin(), сend() и т.д., которые возвращает константный итератор всегда и вы НЕ можете модифицировать элементы контейнера.
Спасибо! Разберусь чуть попозже.
Нашел ошибку в своих тестах. Теперь все примеры компилируются. Подправил статью, раздел 4.7. Еще раз спасибо.
Спасибо! С параметрами функций, возвращаемом значении функции, а также с объявлениями переменных и псевдонимов все в порядке, это я не трогал. Но вот неполные объявления аргументы шаблона удалил, в моем компиляторе MSVC это не работает, скорее всего ошибка компилятора, возможно в других компиляторах работает, но я не проверял.
У меня вообще какая-то чертовщина. Пример не компилируется, но компилируется такой код:
namespace F {
void g(){
std::unique_ptr ptry;
Y* y = new Y();
ptry.reset(y);
}
Y y;
}
Класс Y нигде не определен. То есть компилятор сгенерировал некий пустой класс Y в namespace F. У меня компилятор MSVC. Про шаблоны уберу.
Добавил раздел на эту тему. Если интересно посмотрите раздел 4.7. Еще раз спасибо!
В принципе согласен. Но программист должен знать разные способы решения проблемы и выбрать подходящий в конкретной ситуации.
Спасибо! Не знал про такой вариант. Думаю, для полноты надо добавить в статью раздел с описанием этой ситуации.
Да, это так. Я сам сильно удивился, когда прочитал об этом в [Meyers1]. Согласен, что пользы от этого не много, практичнее использовать ссылку.
Термин «Интеллектуальный указатель» (smart pointer) используется в переводах книг по С++ издательств «И.Д. Вильямс», «Диалектика». Именно они перевели и издали самые известные работы Скотта Мейерса, Герба Саттера и других гуру С++ (например [Meyers2]). Я как-то привык именно к этому варианту.
Спасибо! У меня из железа только Интеловская встроенная графика, поэтому я этот вариант не исследовал.
К сожалению, у меня нет никакого опыта работы с bluray, нет аппаратуры. Единственно, что я могу сказать это то, что в списке протоколов есть bluray, то есть надежда, что ffmpeg сможет прочитать есть. Ну а если сможет прочитать, то вывести - это дело техники. Одно из достоинств ffmpeg - это то, что он не прекращает поддержку старых технологий. Можно попробовать использовать VLC Player, он "сидит" на ffmpeg.
Да, это вариант и неплохой. Здесь мы в очередной раз сталкиваемся с ситуацией, когда в C++ одна и та же цель достигается несколькими способами и наилучший вариант далеко не всегда очевиден. Достоинства const_cast в том, что он "режет глаз", его можно аккуратно инкапсулировать и контролировать, а mutable потенциально влияет на неопределённое количество кода.
Мне кажется, что это рассуждение слишком абстрактно, конкретные задачи могут все поставить на свои места. Главное, чтобы программист знал возможные варианты решения и мог выбрать оптимальные для конкретного случая.
Да, конечно, константность и многопоточность тесно связаны, доступ к константам безопасен из нескольких потоков. Наверное я недостаточно акцентировал на этом моменте, есть только маленький раздел 3.5. Возможно, внесу поправки.
И еще есть семейство set контейнеров, в которых всегда возвращаются константные итераторы, см. раздел 4.2. Там же пример использования const_cast .
Мне кажется, что константное rvalue (для которых будет выбрана версия const &&) появляется только в одном случае, когда это rvalue является вызовом функции, возвращающей константу. Подобную ситуацию я описал в разделе 5.2.
Для неконстантного контейнера по правилам перегрузки вызовется неконстантная версия этих функций, которые возвращают обычный итератор и вы можете модифицировать элементы контейнера. Для константного контейнера по правилам перегрузки вызовется константная версия этих функций, которые возвращают константный итератор и вы НЕ можете модифицировать элементы контейнера. В C++11 появились сbegin(), сend() и т.д., которые возвращает константный итератор всегда и вы НЕ можете модифицировать элементы контейнера.
Если ссылки используются в качестве параметров функции, то она оно позволяет избежать потенциально дорогого копирования.
Большие константные объекты на стеке тоже создают не часто. Чаще всего их располагают в статической памяти.
Поправил.
Спасибо, упустил этот момент. Подумаю, как скорректировать статью.