Описание тега return-value-optimization
C++ copy-elision of return-values.
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
ответ
Как правильно вернуть большие данные из std::future в C++11
Я немного озадачен тем, как правильно возвращать большие данные из асинхронной функции в C++. Возьмите для примера этот код. Он создает большой вектор в функции и возвращает выделенный вектор. #include <unistd.h> #include <iostream> #inc…
24 июл '15 в 14:54
9
ответов
C++: возвращение по ссылке и копирование конструкторов
Ссылки на C++ сбивают меня с толку.:) Основная идея заключается в том, что я пытаюсь вернуть объект из функции. Я хотел бы сделать это без возврата указателя (потому что тогда мне придется вручную delete это), и без вызова конструктора копирования, …
16 фев '10 в 15:08
4
ответа
Работает ли RVO на членах объекта?
Учтите следующее: struct A { /* ... */ }; A foo() { auto p = std::make_pair(A{}, 2); // ... do something return p.first; } auto a = foo(); Будет p.first копироваться, перемещаться или RVO-ed?
26 окт '15 в 11:09
4
ответа
Должен ли я присвоить ссылку или копию функции, возвращающей значение?
У нас есть несколько функций, возвращающих значение: Foo function_1(){ Foo f; // ... return f; } Bar function_2(){ Bar b; // ... return b; } Baz function_3(){ Baz b; // ... return b; } Я использую их для создания экземпляров локальных переменных: vo…
30 апр '18 в 19:22
2
ответа
Возврат локального объекта примитивного типа и структуры
Получение ссылки на временную переменную: struct S { S() = default; S(const S& other) = delete; S(S&& other) = delete; ~S(){} }; S foo1() { return {}; // RVO (???) } int foo2() { return 42; // RVO } int main() { S& i = foo1(); // com…
27 янв '16 в 14:43
0
ответов
Когда лучше возвращаться по ссылкам?
Вопрос Прочитав тонны статей о ссылках на rvalue, я узнал, что: std::string&& f_wrong() { std::string s("hello"); return std::move(s); } неправильно и: std::string f_right() { std::string s("hello"); return s; } достаточно для конструктора …
30 мар '15 в 01:42
4
ответа
NRV (именованное возвращаемое значение) конструктор копирования
Недавно я читал "внутри объектной модели C++" и во время чтения главы 5 у меня возник следующий вопрос: Будет ли компилятор обрабатывать NRVO, даже если у класса есть конструктор копирования?
10 окт '13 в 09:29
4
ответа
Что такое оптимизация копирования и возвращаемое значение?
Что такое копирование? Что такое (именованная) оптимизация возвращаемого значения? Что они подразумевают? В каких ситуациях они могут возникнуть? Каковы ограничения? Если вы получили ссылку на этот вопрос, вы, вероятно, ищете введение . Технический …
18 окт '12 в 11:03
4
ответа
Константная ссылка на временное и копирование - C++
Пожалуйста, рассмотрите следующий код, struct foo { foo() { std::cout << "Constructing!" << std::endl; } foo(const foo& f) { std::cout << "Copy constructing!" << std::endl; } ~foo() { std::cout << "Destructing.." &l…
05 мар '10 в 04:50
1
ответ
Код, который кажется неправильным при компиляции (о возврате объекта)
Недавно кто-то задал мне вопрос о построении возвращаемого значения функции. После нескольких дискуссий я обнаружил, что что-то не так. Вот образец: #include <conio.h> #include <stdio.h> #include <iostream> /* struct A // Won't be …
13 июн '14 в 14:39
2
ответа
Когда компилятор выполняет RVO?
Кажется, есть много вопросов о том, когда компилятор будет выполнять RVO или почему он не выполняет его в такой-то ситуации. После прочтения http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/ я не могу обернуться вокруг этого. В основном …
11 апр '13 в 14:13
3
ответа
Может копировать elision/RVO, вызывать копирование / перемещение с одного и того же объекта
Допустим, у меня есть функция, которая выглядит так: SomeObject copy_maybe(bool make_new, const SomeObject& def) { if (make_new) return SomeObject(); else return def; } И я называю это так: SomeObject obj; obj = copy_maybe(true, obj); Без разреш…
11 апр '18 в 17:49
4
ответа
C++11 Оптимизация возвращаемого значения или переезд?
Я не понимаю, когда я должен использовать std::move и когда я должен позволить компилятору оптимизировать... например: using SerialBuffer = vector< unsigned char >; // let compiler optimize it SerialBuffer read( size_t size ) const { SerialBuf…
04 июл '13 в 15:19
0
ответов
Как быть уверенным в оптимизации копирования / возврата
Я часто возвращаю объекты по значению, предполагая, что копия elision / RVO произойдет. Но я не очень хорошо разбираюсь в компиляторах, и возможность, что иногда что-то в моем коде может саботировать копирование без моего ведома, пугает меня. Нужно …
20 ноя '15 в 13:15
1
ответ
Почему требования RVO такие строгие?
Еще одно "почему должны std::move предотвратить (безымянный) возврат-оптимизацию?" Почему std::move предотвращает RVO? объясняет, что стандарт специально требует, чтобы объявленный тип возвращаемого значения функции соответствовал типу выражения в r…
20 мар '18 в 09:50
2
ответа
valueOf() в Java возвращает объект Но почему там нет хеш-кода?
API для Integer.valueOf("123") возвращает объект. Так что, если я пишу это System.out.println(Integer.valueOf("456"));или же System.out.println(String.valueOf(256)); это должно дать мне хэш-код объекта, но вместо этого он печатает простые значения 4…
18 фев '15 в 11:18
7
ответов
В C++ все еще плохая практика возвращать вектор из функции?
Короткая версия: во многих языках программирования принято возвращать большие объекты, такие как векторы / массивы. Является ли этот стиль приемлемым в C++0x, если у класса есть конструктор перемещения, или программисты C++ считают его странным / ур…
28 июн '10 в 17:52
3
ответа
Правильный способ (переместить семантику) для возврата std::vector из вызова функции в C++11
Я хочу заполнить std::vector (или какой-нибудь другой контейнер STL): class Foo { public: Foo(int _n, const Bar &_m); private: std::vector<Foo> fooes_; } 1. Хорошо выглядящий ctor, высокая производительность std::vector<Foo> get_vect…
02 июн '11 в 07:14
2
ответа
Оптимизация компилятора возвращаемого значения в VS 2010
Используя VS 2010 с полной оптимизацией /Ox рассмотрим следующие два вызова функций: static string test1(const string& input) { return input; } static void test2(const string& input, string& output) { output = input; } Если я использую п…
09 апр '12 в 01:05