Описание тега copy-elision
Исключение копирования относится к исключению из правила "как если бы", позволяющему опускать копии.
2
ответа
Вернуть локальное значение из функции без запуска конструктора копирования
Я пытаюсь удалить конструктор копирования, используя систему типов C++, чтобы предотвратить копирование объекта. struct DeleteCopyConstructor { DeleteCopyConstructor() {}; DeleteCopyConstructor(DeleteCopyConstructor& op2) = delete; DeleteCopyCon…
25 июн '17 в 20:56
1
ответ
Как вернуть std::vector из функции, используя семантику перемещения C++11?
Я знаю, что C++11 имеет семантику перемещения по этой ссылке: Элементы стиля Modern C++ Но это не вводит, как вернуть вектор, используя семантику перемещения. Как это сделать?
11 апр '15 в 15:15
1
ответ
Как конструктор копирования может быть вызван с помощью rvalue
MWE: struct A { A() {std::cout << "constructor" << std::endl; } A(const A& a) {std::cout << "copy constructor" << std::endl; } A(A&& a) {std::cout << "move constructor" << std::endl; } }; int main() { …
04 июл '18 в 05:07
1
ответ
Конструктор копирования не вызывается при возврате из перегруженного оператора + в перегруженный оператор =
Рассмотрим следующий код: #include <iostream> using namespace std; class loc { int longitude, latitude; public: loc() {} loc(int lg, int lt) { longitude = lg; latitude = lt; } loc(const loc& l) { cout << "a" << endl; } loc oper…
16 ноя '14 в 05:41
1
ответ
Структурированные привязки и обязательное копирование
Если вы используете структурированные привязки, как так auto [a, b, c] = std::make_tuple(1, 10.0, "string object"s); тогда копии из возвращенного кортежа будут удалены, а объекты будут отправлены прямо в a, b а также c или инициализация будет констр…
21 янв '17 в 21:36
0
ответов
Функция возврата объекта не выполняет глубокое копирование. Почему temp, возвращаемая функцией foo(), не копируется глубоко?
#include<iostream> using namespace std; class A { int k; int *ptr; public: A(int a):k(a) { cout<<"ctor\n"; ptr = new int[k]; for(int i = 0; i < k; i++) { *(ptr + i) = i*i*i; } } A(const A &obj) { cout<<"copy ctor\n"; k == ob…
24 май '17 в 11:50
1
ответ
Почему исключение копирования не происходит в этом случае?
Рассмотрим этот код: #include <iostream> struct S { S(std::string s) : s_{s} { std::cout << "S( string ) c-tor\n"; } S(S const&) { std::cout << "S( S const& ) c-tor\n"; } S(S&& s) { std::cout << "S&& c…
08 мар '18 в 11:15
2
ответа
std::vector инициализация перемещения / копирования конструктора элемента
У меня есть этот кусок кода: #include <iostream> #include <vector> using namespace std; class Foo{ public: Foo() noexcept {cout << "ctor" << endl;} Foo(const Foo&) noexcept {cout << "copy ctor" << endl;} Foo(F…
17 июл '14 в 00:26
2
ответа
Копировать недоразумение Elision
#include <iostream> struct A { A() { std::cout << "Def Constr\n"; } A(const A&) { std::cout << "Copy Constr\n"; } }; A func1() { return A{}; } void func2(A a) {} int main() { func2(func1()); } После компиляции с g++ Copy.cpp -s…
06 мар '15 в 12:31
4
ответа
Указатели на размещенный в стеке объект и перемещение-конструирование
Примечание. Это полная переформулировка вопроса, который я недавно опубликовал. Если вы обнаружите, что они повторяются, закройте другой. Моя проблема довольно общая, но, кажется, ее легче объяснить на конкретном простом примере. Итак, представьте, …
02 апр '15 в 16:44
1
ответ
Должно ли возвращаемое значение бинарного оператора + перегрузка быть постоянным и может ли это помешать оптимизации?
Учитывая пример кода: class Integer { int i_; public: Integer(int i) : i_(i) {} const Integer operator+(const Integer &arg) const { return Integer(i_ + arg.i_); } }; Я начал задаваться вопросом, должен ли оператор +() возвращать константное цело…
23 авг '12 в 16:08
1
ответ
C++17 копирование elision и уничтожение объектов
Из сравнения, Когда происходит удаление копии, реализация обрабатывает источник и цель пропущенной операции копирования / перемещения (начиная с C++11) просто как два разных способа обращения к одному и тому же объекту, и уничтожение этого объекта п…
13 дек '18 в 13:29
3
ответа
Почему конструктор перемещения не исключается при использовании функций `make_x()`?
Я не могу понять, почему в последнем случае вызывается конструктор перемещения, когда разрешено копирование (или даже обязательно, например, в C++17): class X { public: X(int i) { std::clog << "converting\n"; } X(const X &) { std::clog <…
12 янв '18 в 12:23
2
ответа
Копирование конструкции в списках инициализаторов
Я изучал уродливый мир std::intializer_list, Насколько я понял из стандарта: § 11.6.4: Объект типа std::initializer_list создается из списка инициализаторов, как если бы реализация генерировала и материализовала (7.4) значение типа "массив из N cons…
02 фев '19 в 23:41
2
ответа
Скопировать конструктор elision?
Возможный дубликат: Почему деструктор был вызван только один раз? Учитывая код ниже, я не понимаю вывод в gcc. Я ожидаю, что два объекта будут созданы и уничтожены, но вместо этого я вижу только один вызов конструктора и деструктора. Что тут происхо…
17 янв '12 в 06:24
1
ответ
Скопировать исключение, используя STL (вектор как пример)
Я читал о копировании в C++. И у меня были сомнения по поводу STL в C++, используя эту копию elision. Следующий код: #include <vector> #include <iostream> using namespace std; vector<int> merge(vector<int> &arrA, vector&l…
09 окт '16 в 02:11
3
ответа
Точный момент "возврата" в C++- функцию
Это кажется глупым вопросом, но это точный момент, когда return xxx; "выполняется" в функции, однозначно определенной? Пожалуйста, посмотрите следующий пример, чтобы понять, что я имею в виду ( здесь жить): #include <iostream> #include <str…
22 окт '18 в 13:53
1
ответ
Оптимизация возвращаемого значения с помощью std::pair
В настоящее время я весьма озадачен гарантированным RVO в C++17 и его последствиями. Я понимаю, что для NRVO, я должен убедиться, что вернуть один и тот же экземпляр объекта через все возможные пути возврата функции и инициализировать связанный объе…
10 окт '18 в 19:50
4
ответа
Что такое оптимизация копирования и возвращаемое значение?
Что такое копирование? Что такое (именованная) оптимизация возвращаемого значения? Что они подразумевают? В каких ситуациях они могут возникнуть? Каковы ограничения? Если вы получили ссылку на этот вопрос, вы, вероятно, ищете введение . Технический …
18 окт '12 в 11:03
1
ответ
C++11 кортеж с копией elision или переместить семантику
Я написал функцию, как показано ниже: template <typename T> std::tuple<std::vector<T>, T, T> f() { std::vector<T> p(1000); return std::make_tuple(std::move(p), 10, 10); } Поскольку возвращаемый тип довольно сложен, гарантируе…
26 июн '15 в 15:45