Вопросы по теме 'copy-elision'

Оптимизация возвращаемого значения C++
Этот код: #include <vector> std::vector<float> getstdvec() { std::vector<float> v(4); v[0] = 1; v[1] = 2; v[2] = 3; v[3] = 4; return v; } int main() { std::vector<float> v(4); for (int i...
9062 просмотров

Требуется ли конструктор копирования при возврате неявным преобразованием?
Следующий код отлично компилируется в Visual C ++ 2013, но не в GCC или Clang. Что правильно? Требуется ли доступный конструктор копии при возврате объекта через неявное преобразование? class Noncopyable { Noncopyable(Noncopyable const...
1868 просмотров

Как обеспечить удаление копии, почему она не будет работать с конструктором удаленной копии?
У меня есть некопируемый класс. Копировать это будет проблематично. Я хочу гарантировать , что он никогда не будет скопирован, поэтому я сделал его конструктор копирования deleted : class A { public: A(); A(const A&) = delete;...
3332 просмотров
schedule 02.01.2023

скопировать elision с помощью STL (вектор в качестве примера)
Я читал об исключении копии в С++. И у меня были сомнения по поводу STL в С++ с использованием этой копии. Следующий код: #include <vector> #include <iostream> using namespace std; vector<int> merge(vector<int>...
733 просмотров
schedule 20.08.2022

Структурированные привязки и обязательное исключение копирования
Если вы используете структурированные привязки, подобные этому auto [a, b, c] = std::make_tuple(1, 10.0, "string object"s); тогда копии из возвращенного кортежа будут исключены, а объекты перейдут прямо в a , b и c или инициализация...
197 просмотров

Скопировать elision для инициализации списка, где это указано в стандарте?
В [dcl.init]/17.6 это явно написано, что для случая инициализации в скобках происходит удаление копии: Если выражением инициализатора является значение prvalue, а версия исходного типа без уточнения cv относится к тому же классу, что и класс...
582 просмотров

Как заставить фабричную функцию возвращать некопируемый объект?
Контекст Пытаясь создать архив gzip с другим именем файла внутри, я написал следующий фрагмент кода. #include <iostream> #include <utility> #include <boost/iostreams/filtering_stream.hpp> #include...
922 просмотров

Скопируйте исключение конструктора для прямой инициализации, когда аргумент преобразуется в целевой тип
Этот вопрос касается формулировки стандарта C ++. Все компиляторы, и я думаю, это то, что должно быть, исключите конструктор копирования для инициализации объекта b ниже ( сборка здесь ): struct B; struct A{ operator B(); }; struct B{...
76 просмотров

Как я могу инициализировать нестатические частные переменные-члены шаблона из временных на месте, то есть без копирования или перемещения?
Я хотел бы инициализировать две нестатические частные переменные-члены шаблона шаблона класса из временного на месте, т. е. без копирования или перемещения. Для пояснения рассмотрим следующий пример кода: #include <iostream> struct P {...
103 просмотров
schedule 08.09.2023

Неожиданный конструктор копирования
В следующем примере я ожидаю только одну конструкцию-копию, так как я думал, что промежуточные копии будут копия пропущена . Единственная необходимая (я думал?) копия будет в конструкторе B для инициализации переменной-члена a . #include...
89 просмотров
schedule 26.10.2022

Гарантированное удаление копии для инициализации массива с унифицированными фигурными скобками. Разве это не должно быть обязательным, начиная с С++ 17?
Насколько я правильно понимаю новые правила https://en.cppreference.com/w/cpp/language/copy_elision http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0135r0.html Этот код должен компилироваться для компиляторов, соответствующих...
87 просмотров

Копируйте элизионные и тривиально копируемые типы
Из стандарта 6.7.7 (временные объекты) мы видим: Когда объект типа класса X передается или возвращается из функции, если X имеет хотя бы один подходящий конструктор копирования или перемещения ([специальный]), каждый такой конструктор является...
127 просмотров
schedule 17.04.2022