Описание тега return-by-value

2 ответа

Почему возвращаемое значение должно быть const для не встроенных типов, а не const для встроенных типов?

Решения 4 и 5 на GotW #6 Const-Correctness упоминают это: Point GetPoint( const int i ) { return points_[i]; } Возврат по значению обычно должен быть константным для не встроенных типов возврата. int GetNumPoints() { return points_.size(); } .. поск…
18 мар '12 в 21:46
5 ответов

C++ Возвращаемое значение, ссылка, константная ссылка

Можете ли вы объяснить мне разницу между возвращаемым значением, ссылкой на значение и константной ссылкой на значение? Значение: Vector2D operator += (const Vector2D& vector) { this->x += vector.x; this->y += vector.y; return *this; } Нек…
1 ответ

Вернуть объект из функции по значению и использовать его в присваивании / копировании c'tor C++

Предположим, что функция возвращает объект класса A по значению. A f(); Предположим, у нас есть позднее назначение / копирование c'tor: a = f(); //a is of type A - assignment A aa = f(); // copy c'tor d'or возвращенного объекта вызывается после прис…
05 фев '15 в 20:56
4 ответа

C - Матрицы как передать по значению?

Я разрабатываю функции обработки матрицы для C-проекта. Я рассматриваю либо передачу матриц по значению или по ссылке. Я создал бенчмарк, передающий матрицы по значению и по ссылке, и оба, кажется, выполняют то же самое с флагами оптимизации -O0 и -…
5 ответов

C++ глубокое копирование с объектами

Доброе утро. У меня возникают проблемы с пониманием логики глубокого и поверхностного копирования с объектами на C++ в общем проекте, поэтому я создал следующий пример. int main() { ObjectAType* objecta = ObjectAType::New(); ObjectBType* objectb = O…
16 янв '13 в 17:59
2 ответа

Fortran 2008: Как возвращаются возвращаемые значения функции?

Возможно ли в современном Фортране вернуть массив из функции с производительностью, эквивалентной подпрограмме, заполняющей массив, переданный в качестве аргумента? Рассмотрим, например, как простой пример PROGRAM PRETURN INTEGER :: C(5) C = FUNC() …
2 ответа

Перегрузка оператора ссылкой или значением C++

Я видел много уроков и пытался найти ответ на stackru, но безуспешно. В чем я не уверен, так это Есть ли какая-то практика, когда возвращать по значению или по ссылке, при перегрузке оператора? Например, Class &operator+(){ Class obj; //... retu…
3 ответа

Оптимальный способ вернуть локальное значение в C++11

В старые времена, если бы я хотел строковое представление объекта AЯ бы написал что-нибудь с подписью void to_string(const A& a, string& out) чтобы избежать лишних копий. Является ли это все еще лучшей практикой в ​​C++11 с семантикой переме…
2 ответа

Вернуть ссылку на *this без конструктора копирования?

Я написал класс, подобный следующему: class ScriptThread { public: ScriptThread(): mParent() {} private: ScriptThread(ScriptThread *parent): mParent(parent) {} public: ScriptThread(ScriptThread &&rhs); ScriptThread &operator = (ScriptThr…
3 ответа

C++ Создание экземпляров потомков абстрактного класса с чисто виртуальными функциями

У меня есть абстрактный класс, пусть это будет, например, Animal. У животного есть чисто виртуальная функция еды, которую каждое животное должно выполнять, если оно не хочет голодать. Я гарантирую, что таким образом может быть создан только ребенок …
1 ответ

Скопировать конструктор странное поведение при возврате по значению

Я проверил поведение конструктора копирования с помощью функций, возвращающих объект по значению, и натолкнулся на случай, когда конструктор копирования вызывается, а случай - нет. Пожалуйста, рассмотрите следующий код: class A { public: A() {} A(co…
30 июн '12 в 21:17
1 ответ

Почему неименованный объект, возвращаемый по значению, разрушается до вызова его оператора преобразования?

У меня есть функция, которая возвращает объект по значению. Переменная получателя требует вызова оператора внешнего преобразования для этого объекта. Если я создаю возвращенный объект в операторе возврата (RVO), его деструктор вызывается перед опера…
19 май '15 в 15:34
2 ответа

Безопасно ли возвращать std::string по значению?

В следующем коде строка инкапсулирована в классе Foo. Вызов Foo::getText() возвращает строку по значению. Это создает второй экземпляр строкового объекта, но оба строковых объекта теперь указывают на один и тот же символьный буфер в куче. Когда экзе…
23 июн '16 в 21:04
0 ответов

Почему конструктор копирования вызывается дважды при возврате, но один раз при передаче по значению в функцию

Недавно я запутался в очень простом вопросе, когда я читал о копировании. Рассмотрим следующий код: class Test { public: Test() { cout<< "default c'tor"<<endl; } Test(const& Test) { cout<< "copy c'tor"<<endl; } }; Test Fu…
1 ответ

Как правильно обрабатывать возврат по значению объектов с указателями?

Предположим, у меня есть класс Foo которая "имеет" единственную переменную-член, которая является указателем на некоторый другой объект Bla: struct Foo { Bla *bla; Foo() { this->bla = new Bla(); } ~Foo() { delete this->bla; } }; Как мне обрабо…
2 ответа

Ссылка на элемент вектора, возвращаемый функцией в C++

Может ли кто-то проверить, что следующее является ошибкой, и объяснить, почему? Я думаю, что знаю, но неясно о деталях. (Моя настоящая проблема связана с вектором перечислений, а не целых чисел, но я не думаю, что это должно иметь значение.) Предпол…
4 ответа

Возвращение векторов стандартно в C++

Теперь я знаю, что это общий вопрос, но я не смог найти прямого ответа на этот вопрос. Это действительно вопрос о стандартах. Я работаю над проектом с использованием генетического алгоритма. Но я сталкиваюсь с узким местом, когда дело доходит до воз…
3 ответа

В C++11 все еще существует необходимость передавать ссылку на объект, который будет принимать выходные данные функции?

До C++11, если бы у меня была функция, которая работала с большими объектами, мой инстинкт был бы писать функции с таким прототипом. void f(A &return_value, A const &parameter_value); (Здесь return_value - это просто пустой объект, который б…
16 июн '12 в 04:54
1 ответ

Обертка ctypes для функции, возвращаемой объектами-значениями класса C++ с деструктором

Можно ctypes обернуть функции, которые возвращают объекты (не указатели / ссылки) класса C++ с деструктором? Пример ниже segfaults при вызове lib.init_point_by_value: foo.cpp: #include <iostream> extern "C" { using namespace std; struct Point …
25 июн '18 в 15:53
2 ответа

Означает ли возврат по значению дополнительные копии и дополнительные издержки? C++

Учтите следующее: class Foo { ... }; Foo rbv(); void caller() { Foo x = rbv(); ← the return-value of rbv() goes into x ... } Foo rbv() { ... return Foo(42, 73); ← suppose Foo has a ctor Foo::Foo(int a, int b) } Сколько объектов типа Foo будет постро…
21 апр '14 в 11:00