Описание тега temporary-objects

Временные объекты C++ - это безымянные объекты, созданные в стеке компилятором. Они используются во время инициализации ссылки и во время оценки выражений, включая стандартные преобразования типов, передачу аргументов, возврат функций и оценку выражения throw.
2 ответа

Компилятор выполняет оптимизацию возвращаемого значения в случае возврата переменной-члена?

Учитывая следующий код class foo { private: boost::shared_ptr <std::deque<foo> > m_ptr; public: foo(); boost::shared_ptr <std::deque<foo> > get_my_ptr() { return m_ptr; } }; И когда мы позвоним get_my_ptr() функционировать та…
2 ответа

Не удалось связать многокомпонентный идентификатор "поле"

Я пытаюсь использовать данные, хранящиеся во временном наборе результатов (SOURCE в коде), чтобы заполнить другую таблицу с SQL Server 2012. При выполнении приведенного ниже кода я получаю сообщение об ошибке "Не удалось определить идентификатор из …
30 окт '13 в 09:54
3 ответа

Временный объект не уничтожен правильно?

Смотрите этот код здесь: class test { int n; int *j; public: test(int m) { n = 12; j = new int; cin >> *j; } void show() { cout << n << ' ' << *j << endl; } ~test() { delete j; } }; int main() { test var = 123; var.show…
25 янв '12 в 08:05
1 ответ

Обнаружить (бессмысленное) назначение временному объекту

Есть ли какая-либо опция компилятора, которая позволяет получить предупреждение при попытке назначить временный объект? Пример: struct S { S op() { return S(); } }; int main() { S s; s.op() = s; // assign to temporary. Wants to warn here. } Я знаю, …
2 ответа

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

Это код UB? struct A { void nonconst() {} }; const A& a = A{}; const_cast<A&>(a).nonconst(); Другими словами, является (временным) объектом изначально const? Я просмотрел стандарт, но не могу найти ответ, поэтому буду признателен за ци…
0 ответов

Область видимости C++11 и время жизни временной привязки к (const) ссылке (GCC)

У меня есть следующие вопросы, связанные с той же ситуацией (не в целом): Почему компилятор не выдает предупреждение, когда временный объект связан со ссылкой? Как продлевает жизнь временную работу (когда она привязана к ссылке)? Как интерпретироват…
30 янв '17 в 03:28
2 ответа

Константная ссылка на временный объект перестает работать после области действия функции (время жизни)

Задавая этот вопрос, я узнал, что постоянная ссылка на временный объект действительна в C++: int main () { int a = 21; int b = 21; //error: invalid initialization of non-const reference //int & sum = a + b;e [...] //OK int const & sum = a + …
0 ответов

Есть ли способ добиться продления срока службы путем связывания ссылок, кроме встроенной декларации?

Я знаю, что могу использовать "привязку ссылки на расширение продолжительности жизни", чтобы сохранить временную локальную область действия const auto& temp = "lorem ipsum"s но мне было любопытно, если бы был способ заставить продолжительность в…
06 июн '16 в 11:57
3 ответа

Должен ли временный T в качестве параметра вызывать T(const T&) или T(T&&) в C++11?

Итак, код сначала: #include <iostream> #include <utility> struct X{ int i; void transform(){} X() :i(0){std::cout<<"default\n";} X(const X& src): i(src.i){std::cout<<"copy\n";} X(X&& msrc) :i(msrc.i){msrc.i=0;std:…
11 июн '14 в 20:41
1 ответ

Передача указателя на временный объект

Мы знаем, что можем передавать временные объекты в функции по константной ссылке, например так: class A { public: A(int _b = 0) { b = _b; } int b; }; void foo(A& a) {printf("%d", a.b);} void cfoo(const A& a) {printf("%d", a.b);} int main(voi…
18 сен '14 в 08:33
2 ответа

Использование string::c_str во временной строке

Относительно того, когда временные объекты уничтожаются, действительно ли это: FILE *f = fopen (std::string ("my_path").c_str (), "r"); Будет ли временное уничтожено сразу после оценки первого аргумента fopen или после fopen вызов. Тестирование с ис…
03 мар '14 в 12:21
1 ответ

Передача временных объектов по ссылке

У меня есть два класса: круг и точка Класс Circle содержит Dot, а Dot содержит int. Circle имеет функцию getDot(), а Dot имеет функцию lessThan(Dot&). Я хочу отсортировать массив Circles, elems[], по значениям int внутри Dot. Если у меня есть Circle…
1 ответ

MySQL создает временную таблицу с автоинкрементом только из SELECT

С MySQL я знаю, что можно создать временную таблицу из SELECT: создать временную таблицу в операторе SELECT без отдельной CREATE TABLE Я также знаю, что можно создать автоинкремент во временной таблице: автоинкремент во временной таблице Я хочу сдел…
1 ответ

Как сохранить временные значения / объекты для сеанса в приложении iOS

Итак, у меня есть гибридное приложение для электронной коммерции для iOS, над которым я работаю, и мне нужно временно хранить несколько значений строк / массивов в течение всего процесса оформления заказа. Если пользователь покидает процесс оформлен…
19 июн '14 в 07:56
2 ответа

Конструктор объекта C++ с временным объектом в качестве аргумента

Я написал некоторый код, и мне вдруг пришло в голову, что то, что я делаю, может быть действительно плохой идеей. Вот своего рода абстрактный пример. Ключевым моментом является передача по ссылке вектора. // vector.hpp class vector { vector(double x…
1 ответ

Принудительная очистка временных переменных

(Пожалуйста, извините, если этот вопрос является дубликатом, я новичок и понятия не имел, какие термины искать, чтобы найти ответ!) Я пытаюсь написать библиотеку линейной алгебры с некоторым очень элементарным управлением памятью для C++ - по сути, …
10 мар '18 в 16:32
3 ответа

Оптимизация Java: объявление переменных класса VS с использованием временных переменных

Прежде всего, извините, если мой английский не идеален, но я не из англоязычной страны (Испания), так что... Ну вот и вопрос. Creating При создании класса рекомендуется использовать все возможные временные переменные, или лучше объявить свои перемен…
1 ответ

Могу ли я получить доступ к членам временных объектов?

Могу ли я получить доступ к члену объекта, если я создаю временный объект с помощью class-type-name(parameters).member и предположить, что конструктор сделан? Рассмотрим следующий пример: struct A { enum status { ERROR = -1, SUCCESS } state; A (int …
04 фев '14 в 14:00
1 ответ

Адрес массива prvalue

Я не понимаю, почему это не работает: auto a = (int[]){1, 2, 3, 4, 5}; > error: taking address of temporary array Я понимаю, что массивы lvalue распадаются на указатели при преобразовании в rvalue, но здесь массив уже является rvalue (фактически …
14 фев '19 в 17:51
5 ответов

Как реализовать потокобезопасный контейнер с естественным синтаксисом?

Предисловие Код ниже приводит к неопределенному поведению, если используется как есть: vector<int> vi; ... vi.push_back(1); // thread-1 ... vi.pop(); // thread-2 Традиционный подход - это исправить std::mutex: std::lock_guard<std::mutex>…