Вопросы по теме 'return-value-optimization'

константная ссылка на временную и копируемую - С++
Пожалуйста, рассмотрите следующий код, struct foo { foo() { std::cout << "Constructing!" << std::endl; } foo(const foo& f) { std::cout << "Copy constructing!" << std::endl; }...
2766 просмотров
schedule 13.10.2022

Как вернуть fstream (C++0x)
Я думаю, что сразу приступлю к этому и начну с кода: #include <iostream> #include <fstream> #include <string> class test : public std::ofstream { public: test(const std::string& filename) {...
2937 просмотров

Копирование-исключение автоматической переменной для возврата
Мне интересно, если в C++0x "12.8 Копирование и перемещение объектов класса [class.copy] параграф 31" , когда происходит copy elision , точно: Когда выполняются определенные критерии, реализации разрешается опускать конструкцию...
418 просмотров

Принудительное построение RVO/перемещения при возврате по значению
Скажем, у меня есть объект 'foo' с конструктором копирования и конструктором перемещения, а также функция foo f() { foo bar; /* do some work */ return bar; } В стандарте указано, что компилятор попытается сделать: NRVO, возврат по...
911 просмотров

Оптимизация возвращаемого значения при возврате по ссылке
Я прочитал много статей об оптимизации возвращаемого значения. Тем не менее, я не уверен, что полностью понимаю, происходит ли это в следующем случае (адреса на самом деле всегда идентичны): #include "stdafx.h" class Type { public: Type(int...
576 просмотров

Как отключить оптимизацию возвращаемого значения С++ только для одного типа?
Я столкнулся с ситуацией, когда мне действительно нужно выполнить нетривиальный код в конструкторе копирования/операторе присваивания. От этого зависит правильность алгоритма. Хотя я мог бы отключить оптимизацию возвращаемого значения с помощью...
1091 просмотров

Может ли возврат заключенного в фигурные скобки инициализатора привести к копии на С++?
Пример: struct s { int a; }; s func() { return {42}; } int main() { s new_obj = func(); // line 6 (void) new_obj; return 0; } Это работает. Что произойдет, если мы предположим, что наш компилятор не выполняет RVO? func...
499 просмотров

Конструктор копирования не вызывается при возврате из перегруженного оператора + в перегруженный оператор =
Рассмотрим следующий код: #include <iostream> using namespace std; class loc { int longitude, latitude; public: loc() {} loc(int lg, int lt) { longitude = lg; latitude = lt;...
138 просмотров

Оптимизация возвращаемого значения и копирование в C
Некоторые люди не знают, что можно передавать и возвращать структуры по значению в C . Мой вопрос касается компилятора, который делает ненужные копии при возврате структур в C. Используют ли компиляторы C, такие как GCC, Оптимизация возвращаемого...
5764 просмотров

Каково влияние «явного» ключевого слова на оптимизацию возвращаемого значения (RVO)?
Следующий код работает отлично (показывая RVO): struct A { A (int) { cout << "A::A()\n"; } // constructor A (const A&) { cout << "A::A(const A&)\n"; } // copy constructor }; A foo () { return A(0); } int main () { A...
258 просмотров

Почему возврат std::Optional иногда перемещает, а иногда копирует?
См. приведенный ниже пример возврата необязательного параметра UserName — перемещаемый/копируемый класс. std::optional<UserName> CreateUser() { UserName u; return {u}; // this one will cause a copy of UserName return u; // this...
3060 просмотров
schedule 23.11.2022

RVO при преобразовании возвращаемого значения
Я борюсь со сложностью преобразований и приведения типов, и я не могу найти в Интернете совет, который четко гарантировал бы эффективное преобразование при возврате из функции. У меня есть два класса: Base и Derived, где Derived не имеет...
53 просмотров