Вопросы по теме 'copy-elision'
Почему NRVO запускает / не запускает g ++ в приведенном ниже коде?
Я изучал NRVO и его поддержку на разных компиляторах и обнаружил странное поведение, которое довольно сбивает с толку.
Пример кода:
#include <iostream>
using namespace std;
class X {
public:
X() {...
965 просмотров
schedule
27.10.2021
Как включить элементы перемещения, исключающие копирование, для собственных векторов?
Поддержка move для Eigen был представлен в этом патче в 2011 году . Однако я не могу найти конструктор перемещения в заголовочном файле Matrix. Кроме того, на веб-странице Eigen все еще есть семантика перемещения, указанная как элемент "to do"...
1093 просмотров
schedule
09.11.2021
Является ли этот код четко определенным, независимо от того, есть ли копия?
Рассмотрим этот код:
#include <iostream>
struct Test
{
int x;
int y;
};
Test func(const Test& in)
{
Test out;
out.x=in.y;
out.y=in.x;
return out;
}
int main()
{
Test test{1,2};
std::cout << "x: "...
424 просмотров
schedule
02.11.2021
Почему необходима семантика перемещения для исключения временных копий?
Итак, мое понимание семантики перемещения состоит в том, что они позволяют вам переопределять функции для использования с временными значениями (rvalues) и избегать потенциально дорогостоящих копий (путем перемещения состояния из безымянного...
1369 просмотров
schedule
09.09.2021
Сколько временных объектов создается при сложении двух объектов без оптимизации возвращаемого значения?
Я решил задать этот вопрос после прочтения пунктов 20 и 22 книги Скотта Мейерса «Более эффективный C ++».
Допустим, вы написали класс для представления рациональных чисел:
class Rational
{
public:
Rational(int numerator = 0, int...
160 просмотров
schedule
04.11.2021
Что такое диагностика clang 'range-loop-analysis'?
Фон:
Рассмотрим следующий пример :
#include <iostream>
#include <vector>
int main() {
std::vector<bool> vectorBool{false, true};
for(const auto &element : vectorBool) std::cout << std::boolalpha <<...
5137 просмотров
schedule
26.09.2021
инициализация некопируемого члена (или другого объекта) на месте из фабричной функции
Класс должен иметь допустимый конструктор копирования или перемещения, чтобы любой из этих синтаксисов был допустимым:
C x = factory();
C y( factory() );
C z{ factory() };
В C++03 было довольно часто полагаться на исключение копирования,...
2364 просмотров
schedule
01.03.2022
gcc и clang отменяют вызов конструктора перемещения в приведенном ниже фрагменте. Это верно?
В приведенном ниже коде объект s класса S используется для инициализации объекта класса D с прямой инициализацией D d(s); . Функция преобразования S :: operator D () используется для преобразования объекта s во временный объект типа D ....
310 просмотров
schedule
07.03.2022
Передача по значению, приводящая к дополнительному ходу
Я пытаюсь понять семантику перемещения и исключение копирования / перемещения.
Мне нужен класс, который собирает некоторые данные. Я хотел бы передать данные в конструктор, и я хотел бы владеть данными.
Прочитав это , this и this У меня...
457 просмотров
schedule
20.03.2022
std::pair move не пропущен по определению?
Я заметил кое-что очень странное в Visual Studio 2012: определение объекта пары следующим образом:
auto objp = pair<int, LogMe>();
не будет игнорировать копирование/перемещение пары в VC11, этот вызов напечатает:
LogMe::LogMe...
336 просмотров
schedule
25.05.2022
vector.push_back rvalue и копирование
Я push_back превращаю временный объект в vector такой,
vector<A> vec;
vec.push_back(A("abc"));
будет ли компилятор применять copy-elision для создания временного A("abc") непосредственно в vector , так что ctor копирования A не...
1765 просмотров
schedule
27.08.2023
При выполнении копирования-исключения компилятор не рассматривает конструктор копирования в разрешении перегрузки, когда конструктор перемещения удаляется. Почему?
Я могу понять, что компилятор выполняет copy-elision в приведенном ниже коде, поскольку конструкторы копирования и перемещения не вызываются в так называемом copy-initialization , выполненном в main() . См. живой пример .
#include...
280 просмотров
schedule
19.02.2023
Используют ли неявные преобразования типа класса конструктор-копию?
Следующая цитата из моей книги C++:
Когда мы используем прямую инициализацию, мы просим компилятор использовать обычное сопоставление функций для выбора конструктора, который лучше всего соответствует предоставленным нами аргументам. Когда мы...
443 просмотров
schedule
10.09.2023
Есть ли какая-то особая причина, по которой конструктор перемещения не опущен в приведенном ниже фрагменте?
gcc , clang и VS2015 не отменяют вызов конструктора перемещения в приведенном ниже коде. , бросив объект a . Мне кажется, что условия, установленные в подпункте (31.2) §8.12 [class.copy] / 31 (N4140), выполнены.
#include <iostream>...
264 просмотров
schedule
29.04.2023
Как быть уверенным в оптимизации копии/возвращаемого значения
Я часто возвращаю объекты по значению, предполагая, что произойдет копирование elision/RVO.
Но у меня нет хорошего внутреннего понимания компиляторов, и возможность того, что иногда что-то в моем коде может саботировать копирование elision без...
39 просмотров
schedule
14.06.2023
Будет ли «Гарантированное исключение копирования» (P0135, C++1z) потенциально требовать взлома ABI?
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0135r0.html
Вышеупомянутое предложение для «Гарантированного устранения копирования» было включено в рабочий документ C++ на собрании в июне 2016 года в Оулу, Финляндия, за которое затем...
780 просмотров
schedule
22.01.2023
Гарантированное удаление копии и Неперемещаемый{Неперемещаемый{}}
Я обнаружил, что в GCC 7 реализовано гарантированное исключение копирования, и я попробовал следующий код в wandbox :
#include <iostream>
struct NonMovable
{
NonMovable() noexcept = default;
NonMovable(NonMovable&&)...
429 просмотров
schedule
26.11.2022
Кажется, что копирование происходит даже при компиляции с -fno-elide-constructors
#include <iostream>
class A {
public:
A() { std::cout << "Constructor" << std::endl; }
A(const A& a) { std::cout << "Copy Constructor" << std::endl; }
A& operator=(const A& a) { std::cout...
125 просмотров
schedule
07.08.2023
Утверждается ли в стандарте, что копии должны быть эквивалентны?
Предположим, у меня есть странный строковый тип, который либо владеет, либо не владеет базовым буфером:
class WeirdString {
private:
char* buffer;
size_t length;
size_t capacity;
bool owns;
public:
// Non-owning constructor...
305 просмотров
schedule
19.07.2023
Работает ли гарантированное исключение копирования с параметрами функции?
Если я правильно понял, начиная с C++17, этот код теперь требует, чтобы копирование не выполнялось:
Foo myfunc(void) {
return Foo();
}
auto foo = myfunc(); // no copy
Верно ли это и для аргументов функции? Будут ли копии оптимизированы...
823 просмотров
schedule
21.07.2023